1、希爾排序
算法思想簡單描述:在直接插入排序算法中,每次插入一個數,使有序序列只增加1個節點,並且對插入下一個數沒有提供任何幫助。如果比較相隔較遠距離(稱爲增量)的數,使得數移動時能跨過多個元素,則進行一次比較就可能消除多個元素交換。D.L.shell於1959年在以他名字命名的排序算法中實現了這一思想。
算法先將要排序的一組數按某個增量d分成若干組,每組中記錄的下標相差d.對每組中全部元素進行排序,然後再用一個較小的增量對它進行,在每組中再進行排序。當增量減到1時,整個要排序的數被分成一組,排序完成。下面的函數是一個希爾排序算法的一個實現,初次取序列的一半爲增量,以後每次減半,直到增量爲1。希爾排序是不穩定的。
2、希爾排序代碼:
#include "stdafx.h"
#include "iostream.h"
//希爾排序
void ShellSort(int *x, int n)
{
int h, j, k, t;
/*控制增量*/
for (h=n/2; h>0; h=h/2)
{
/*直接插入排序*/
for (j=h; j<n; j++)
{
t = *(x+j);
for (k=j-h; (k>=0 && t<*(x+k)); k-=h)
{
*(x+k+h) = *(x+k);
}
*(x+k+h) = t;
}
}
}
int main()
{
int a[11]={240,41,1242,1324,29423,3424,445,46,547,59,36};
ShellSort(a,11);
for (int i=0;i<11;i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
return 0;
}