1. 程式人生 > >排序算法之插入排序

排序算法之插入排序

oid code wap for pre spa 每次 [] 位置

思路:

  每次叠代都和前面的元素進行比較,如果小於前面的元素則把當前元素和其前面的元素進行交換,然後接著再比較和前面元素的大小,若還是小於前面的元素則繼續進行交換。如果大於前面的元素則終止當前的叠代。和選擇排序相比,優勢在於可以提前終止叠代。

原始數組   : 5 7 8 2 3 9

外層循環一次 : 5 7 8 2 3 9

外層循環二次 : 5 7 8 2 3 9

外層循環三次 : 2 5 7 8 3 9

外層循環四次 : 2 3 5 7 8 9

外層循環五次 : 2 3 5 7 8 9

template< class
T > void insetSort( T data[], int iLength ) { for (int n=1; n<iLength; n++)//從第二個元素開始比較 { for (int i = n; i> 0 ; i--) { if( data[i - 1 ] > data[i]) { swap( data[ i -1], data[i]); } else {
break; } } } }

優化:

  可以看出下面的代碼用一次賦值代替了上面的swap(三次賦值)。  

template< class T >
void insetSort( T data[], int iLength )
{
    for (int n=1; n<iLength; n++)
    {
        T temp = data[n];
        int i; //保存元素temp的插入位置。
        for ( i = n; i> 0 && data[i - 1
] > temp ; i--) { data[i] = data[i-1]; } data[ i ] = temp; } }

排序算法之插入排序