插入排序 直接,折半,二路,希爾

2021-07-03 10:58:00 字數 1893 閱讀 9895

插入排序 給出一下四種方法:

直接插入排序,折半插入排序,二路插入排序,希爾插入排序

**實現:

[cpp]view plain

copy

print?

#include

using

namespace

std;  

#define size 21

typedef

intsqlist[size];  

void

sinsertsort(sqlist &l, 

intn)  

//直接插入

l[j + 1] = l[0];  

}  }  

}  void

binsertsort(sqlist &l, 

intn)  

else

}  for(

intj = i - 1; j >= high + 1; --j)  

l[high + 1] = l[0];  

}  }  

void

twinsertsort(sqlist &l, 

intn)         

//2—路插入排序

else

if(l[i] > t[last])  

else

t[j] = l[i];  

}  }  

for(

inti = 0; i 

}  void

shellinsert(sqlist &l, 

intn, 

intdk)

//希爾插入  

l[j + dk] = t;             //賦值  

}  }  

}  void

shellsort(sqlist &l, 

intn, 

intdlta, 

intt)

//希爾排序  

}  void

main()  

;//0為哨兵位

cout <

<

for(

inti = 1; i 

cout <

sinsertsort(sq,9);  

for(

inti = 1; i 

cout <

binsertsort(sq, 9);  

for(

inti = 1; i 

cout <

sqlist sq = ;  

cout <

<

for(

inti = 0; i 

cout <

twinsertsort(sq, 8);  

for(

inti = 0; i 

cout <

sqlist sq = ;//哨兵位  

cout <

<

for(

inti = 1; i <= 8; ++i)            

//列印sq

cout <

intdlta = ;             

//增量陣列  

shellsort(sq, 8, dlta, sizeof

(dlta) / 

sizeof

(int

));//希爾排序

cout <

<

for(

intj = 1; j <= 8; ++j)  

cout <

}  

輸出結果:

折半 二路插入排序

折半插入排序 直接插入排序是將待插入元素與前面的元素一一比較,尋找合適的位置插入。而折半插入是通過折半來查詢位置,所謂折半 可以參考二分查詢 就是定義兩個變數分別指向頭start和尾end,取其中間值mid。如果待插入元素大於mid位置上的元素就這mid和end之間再查詢,如果小於,則在start和...

二路插入排序

插入排序時需要移動大量元素。為此可用乙個輔助的迴圈陣列來減少元素的移動次數。具體做法如下,對於乙個待排序的陣列a,我們首先找到乙個與a相同大小的迴圈陣列。然後按照以下操作進行。1.令b 0 a 0 因為乙個元素總是有序的。2.令兩個指標first和final指向b中已存在元素的最大和最小值。3.對於...

C 實現插入排序 直接 折半插入,希爾排序

時間複雜度和穩定性都在 塊裡 直接插入排序的實現 include using namespace std 直接插入排序 最好時間複雜度為o n 平均和最壞都是o n 2 不穩定 適用於順序儲存和鏈式儲存 intmain 輸出陣列元素 for i 0 i n i cout p i cout endl ...