常用排序演算法 1 插入排序

2021-06-05 19:36:18 字數 1029 閱讀 1114

插入演算法-基本插入

把要排序的數列分層兩部分:第一部分包含了數列除最後乙個元素外的所有元素,而第二部分僅包含數列的最後乙個元素,再把這個最後元素插入到此刻已經是有序的第一部分裡的正確位置,保證插入後數列的有序性。時間複雜度最好為o(n),最壞o(n^2),平均o(n^2);空間複雜度o(1)

插入排序包括:直接插入排序,二分插入排序,鍊錶插入排序,縮小增量排序(shell排序)

void insertsort(type* arr,long len)

/*將arr[i]插入到正確位置high*/

for(j=i;j>=high+1;--j)

arr[j]=tmpdata;

}}

插入排序-2路插入【不理解】

折半插入排序的改進,優先插入在序列前面或後面,然後再考慮插入到中間

void cinsertionsort::path2insertion(void)

; //對順序表l作2-路插入排序。

int d[length] = ;

d[0] = l[1];//l中d的第乙個記錄為d中排好序的記錄。

int first = 0, final = 0;//first、final分別指示d中排好序的記錄的第1個和最後1個記錄的位置。

for (int i = 2; i <= length; ++i)//依次將l的第2個~最後乙個記錄插入d中。

else if (l[i] > d[final])//待插入記錄大於d中最小值,插入到d[final]之後(不需移動d陣列的元素)。

else//待插入記錄大於d中最小值,小於d中最大值,插入到d的中間(需要移動d陣列的元素)。

d[j + 1] = l[i];}}

for (int i = 1; i <= length; i ++)//迴圈把d賦給l。

//列印排序結果。

for (int i = 0; i <= length; ++ i)

cout << endl;

}

參考:

排序演算法(1) 插入排序

輸入 n個數的乙個序列 a1,a2 an 輸出 輸入序列的乙個排序 a1,a2,an 滿足a1 a2 an。首先,對於少量元素的排序,插入排序是一種有效的演算法。舉個生動的例子,插入排序就像我們手裡剛剛分到的撲克牌,亂序。我們會將排由左到右進行整理,由小到大排序。待排序列 5 4 3 9 7 5 3...

排序演算法1 插入排序

插入排序思想 每一步將乙個待排序的元素,按期排序碼的大小,插入到前面已經排好序的一組元素的合適位置上去,知道元素插完。插入排序分為直接插入排序,和優化後的二分插入排序,我們先看第一種 基本思想 當我們插入第i i 1 個元素時,前面的所有元素已經排好序,此時我們使用當前元素從後向前比較,直到找到乙個...

排序演算法 1 插入排序

插入排序的過程和平時打牌的時候給手裡的牌排序差不多 從牌桌上抽一張牌 把抽到的牌從右到左 或者從左到右 挨個和手裡的牌進行比較,當發現左邊的牌大一些,右邊的牌小一些,就將牌插入到該位置 重複執行步驟1,直到牌抽完了 include include 對範圍 first,last 的元素進行插入排序 p...