1. 程式人生 > >C++資料結構5 插入排序

C++資料結構5 插入排序

插入排序和氣泡排序,選擇排序並稱三大低階排序,但是插入排序的速度是最快的。

插入排序就是預設第一個數是已經排序好的,從第二個開始拿出去記為temp,依次和已經排序好的數進行比較,如果temp比他們都大,則放在最右邊,否則已經排序好的數依次移動,給temp一個適當的位置進行插入。

#include <iostream>

using namespace std;

template<class T>
void InsertSort(T *a,const int n)   //a為陣列,n為陣列元素個數
{
    int in,out;
    //假設out=0;第一個數已經排序完成,先取出第二個數,在已經排序好的數進行比較
    for(out=1;out<n;out++)
    {
        in=out;
        T temp=a[out];  //拿出去一個數
        while(in>0 & temp<a[in-1])  //如果拿出去的數比已經排序好的數小,則已經排序好的數向後移,直到遇到第一個(in=0)停止或者temp比這個數大為止
        {
            a[in]=a[in-1];  //向後移動資料
            --in;
        }
        a[in]=temp;  //結束迴圈把temp拿進去
    }
}


int main()
{
    double a[]={0,5,6,7,1,8,9,10,23,5,6.3,4.5};
    InsertSort(a,sizeof(a)/sizeof(a[0]));
    for(int i=0;i<(sizeof(a)/sizeof(a[0]));i++)
        cout<<a[i]<<endl;
    //cout << "Hello world!" << endl;
    return 0;
}