插入排序 2路插入排序原理分析及原始碼演示

2021-07-31 01:57:14 字數 781 閱讀 8575

2路插入排序是在直接插入排序的基礎上進行優化:減少排序過程中元素移動的次數。不過需要額外增加n個輔助空間。

把新增的輔助空間(n個元素的陣列),當做乙個環對待,再第乙個元素插入之後(標記當前最大最小元素),以後分別從兩邊插入資料,比最大元素大的放右邊,比最大元素小的放左邊。

如果大於最小,小於最大,則按照常規插入排序的思路,把最大的元素依次往右邊移動,直到找到合適的位置。

template

//2_insert_sort

int sort(t* t, int n)

else

if(current <= tmp[small])

else

tmp[(p + n) % n] = current;

big = (big + 1 + n) % n;}}

for(int k=0; kdelete tmp;

return comp_times;

}

執行結果:

最好情況下:o(

n)如:已經有序的情況

9 7 5 3 2 1

或者:(不會遇到比最大元素小比最小元素大的情況)

8 7 6 5 9 4 3

由於借助了輔助空間,空間複雜度為: o(

n)

2路插入排序

基本思想 以第乙個記錄為界,將整個記錄序列分成兩部分進行處理。將不小於第乙個記錄的所有記錄用折半插入的方式插入左路的序列序列中,將小於第乙個序列的記錄插入用折半插入的方法插入到右路的序列中。final為左路最後乙個元素,first為右路第乙個元素。空間複雜度o n 時間複雜度o n 2 這是穩定的排...

排序演算法 2 路插入排序

include include define status int define max 20 typedef struct elemtype typedef struct sqlist void inital sqlist l 初始化 bool lt int i,int j void towrod...

2路插入排序實現

1,2路插入排序的思想 在折半插入排序的基礎上改進,目的是減少排序過程中激動記錄的次數,既然是在折半的基礎上,那麼應該也能減少查詢操作。具體做法 另設乙個和原陣列l同型別的陣列d,將l 1 賦值給d 0 並將d 0 看成是在排好序的序列中處於中間的位置,即當l中來乙個數和d 0 比較,大往d 0 後...