插入排序 直接插入和希爾

2021-06-06 11:51:42 字數 752 閱讀 3024

插入排序主要包括 直接插入和希爾排序

直接插入排序: 穩定,時間複雜度o(n^2)

從第二個元素開始,將後面的資料依次插入到前面有序的佇列中

void derectinsert(int data, int len)

data[j+1] = value;}}

以上演算法也可以在最前面插入乙個哨兵,讓他的值等於value,這樣就可以不用判斷 j>=0了;另外,因為前面的資料已經是有序的了,所以在插入的時候可以採用折半查詢,這樣可以提高速度,為o(n*logn)

希爾排序:不穩定,時間複雜度 平均時間 o(nlogn) 最差時間o(n^s) 1它的演算法不是每次乙個元素挨乙個元素的比較。而是初期選用大跨步(增量較大)間隔比較,使記錄跳躍式接近它的排序位置;然後增量縮小;最後增量為 1 ,這樣記錄移動次數大大減少,提高了排序效率。希爾排序對增量序列的選擇沒有嚴格規定。

①先取乙個正整數 d1(d 1 <;n) ,把全部記錄分成 d1個組,所有距離為 d1的倍數的記錄看成一組,然後在各組內進行插入排序;

②然後取 d2( d2 < d1 ) 。

③重複上述分組和排序操作;直到取 di=1(i>=1) ,即所有記錄成為乙個組為止。一般選 d1約為 n/2 , d2為 d 1 /2 , d3為 d 2 /2 ,…, d i =1 。

void shellsort(int data, int len)

data[j+d] = value;}}

d = d/2;

}注:當 d = 1的時候就是乙個直接插入排序

插入排序(直接插入 希爾)

排序策略 在有序表的恰當處插入乙個新元素,並保持該有序表的有序性 即,當插入第n個元素時,前n 1個元素已經是有序排列 排序過程 以集合中資料為例 初始儲存 第一趟 插入38 第二趟 插入65 第三趟 插入97 第四趟 插入76 第五趟 插入13 第六趟 插入27 第七趟 插入49 一共有八個資料,...

插入排序 直接插入 希爾排序

直接插入排序是將元素按順序插入已經排好序的序列中。對於待插入的元素,如果比最後乙個元素還大,則不用處理。否則,從後邊元素開始比較,並順次後移,直到碰到元素小於或者等於該元素。設定第乙個元素位置為哨兵,用來存放待插入元素。include include include using namespace ...

插入排序 (直接插入排序和希爾排序)

當插入第i i 1 個元素時,前面的src 0 src 1 src i 1 已經排好序,此時用src i 的排序碼與 src i 1 src i 2 的排序碼順序進行比較,找到插入位置即將src i 插入,原來位置上的元素順序後移 void insertsort int src,int n 直接插入...