插入排序 給出一下四種方法:
直接插入排序,折半插入排序,二路插入排序,希爾插入排序
**實現:
[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 ...