数据结构与算法 ~ 排序 ~ 希尔排序
/*sort--shellsort*/
#include<stdio.h>
#include<stdlib.h>
void Print(int *list,int len){
int i;
printf ("\n当前排序的结果是:");
for (i=1;i<=len;++i)
printf (" %d,",list[i]);
}/*Print*/
void shellsort(int *list,int *dlta,int dlen,int len){
int i;
for (i=1;i<=dlen;++i){
shellinsert(list,dlta[i],len);
Print(list,len);
}
}
int shellinsert(int *list,int dk,int len){
int i,j;
for(i=dk+1;i<=len;i++)
if (list[i]<list[i-dk]){
list[0]=list[i];
j=i-dk;
while(j>0&&list[0]<list[j]){
list[j+dk]=list[j];
j-=dk;
}/*while*/
list[j+dk]=list[0];
}/*if*/
}/*shellsort*/
int main (){
int list[20],dlta[20]; /*dlta数组存放希尔增量*/
int len=0,dlen=0;
int node,i=0,k;
printf ("\n请输入数字(退出输入0):");
scanf("%d,",&node);
while(node!=0){
list[++len]=node;
printf ("\n请输入数字(退出输入0):");
scanf("%d,",&node);
}/*while*/
k=len/2;
while(k!=0){
dlta[++dlen]=k;
k=k/2;
}/*while*/
Print(list,len);
shellsort(list,dlta,dlen,len);
printf("\n=====the sort========");
Print(list,len);
system("pause");
exit(0);
}
运行结果是:
请输入数字(退出输入0):59
请输入数字(退出输入0):48
请输入数字(退出输入0):75
请输入数字(退出输入0):96
请输入数字(退出输入0):86
请输入数字(退出输入0):23
请输入数字(退出输入0):37
请输入数字(退出输入0):59
请输入数字(退出输入0):65
请输入数字(退出输入0):14
请输入数字(退出输入0):0
当前排序的结果是: 59, 48, 75, 96, 86, 23, 37, 59, 65, 14,
当前排序的结果是: 23, 37, 59, 65, 14, 59, 48, 75, 96, 86,
当前排序的结果是: 14, 37, 23, 59, 48, 65, 59, 75, 96, 86,
当前排序的结果是: 14, 23, 37, 48, 59, 59, 65, 75, 86, 96,
=====the sort========
当前排序的结果是: 14, 23, 37, 48, 59, 59, 65, 75, 86, 96,请按任意键继续. . .