1. 程式人生 > >【總結】經典排序演算法

【總結】經典排序演算法

最近在學習演算法,趁這個機會總結一些演算法。慢慢更新,歡迎交流探討。

參考書籍:《演算法導論》

排序:

輸入:n個數

輸出:有序(從大到小、從小到大)序列

一、插入排序

做排序的都需要做遍歷,而插入排序,顧名思義,就是插隊。

不必多說,給個案例體會一下:

輸入:5 4 3 2 1

處理:

  •    4 5 3 2 1
  •    3 4 5 2 1
  •    2 3 4 5 1
  •    1 2 3 4 5

輸出:1 2 3 4 5

輸入:6 8 2 4 5

處理:

  • 6 8 2 4 5
  • 2 6 8 4 5
  • 2 4 6 8 5
  • 2 4 5 6 8

程式碼如下:

#include<iostream>
#include<string.h>
using namespace std;
int main()
{
    int n,key,i,j,a[100];
    while (cin>>n,n!=0)
    {
        for(int i=0;i<n;i++)
        cin>>a[i];
        for(int j=1;j<n;j++)
        {
            key=a[j];
           for(i=j-1;i>=0&&a[i]>key;i--)
               a[i+1]=a[i];
            a[i+1]=key;

        }
        for(int k=0;k<n;k++)
        {
            cout<<a[k]<<" ";
        }
        cout<<endl;
    }
}