#include <stdio.h>
#include <stdlib.h>
/*希爾排序*/
int* shellsort(int size,int init,int *list)
{
int i,j,dk;
for(dk = init;dk >= 1;dk /= 2)
{//間隔 每次折半
for(i = dk+1;i <= size;i++)//第一個間隔之後的元素往前走着排
{
list[0] = list[i];//每一次的哨兵
for(j = i-dk;list[j] > list[0] && j > 0;j -= dk)//比較排序的時候跟前面第dk個比較
list[j+dk] = list[j];
list[j+dk] = list[0];
}
printf("當dk=%d排序後:",dk);
for(i = 1;i <= size;i++)
printf("%d%c",list[i]," \n"[i == size]);
}
return list;
}
int main(int argc, char const *argv[]) {
int *list,size,i,init;
printf("請輸入數組大小:");
scanf("%d",&size);
list = (int*)malloc(sizeof(int)*(size+1));
printf("請輸入%d個數字:\n",size);
for(i = 1;i <= size;i++)
scanf("%d",&list[i]);
printf("請輸入最初增量(後面增量依次折半):");
scanf("%d",&init);
list = shellsort(size,init,list);
printf("希爾排序結果是:\n");
for(i = 1;i <= size;i++)
printf("%d%c",list[i]," \n"[i == size]);
return 0;
}
/*38 1 23 56 89 0 12 34 56 81 89 8 5 6 8 5 3 1 34 0 76 2 12 56 71 2 58 9 23 45 78 53 5 7 54 17 9 32 5 19*/
王道考研 ++++ 希爾排序
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.