排序算法之插入排序
阿新 • • 發佈:2017-05-31
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< classT > 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; } }
排序算法之插入排序