数据结构与算法 ~ 排序 ~ 折半插入排序
/*sort----binsort*/
#include<stdio.h>
#include<stdlib.h>
void Binsort(int *list,int len){
int i,j,k;
int mid, low,high;
for (i=2;i<=len;++i){
list[0]=list[i];
low=1;high=i-1;
while(low<=high){
mid=(low+high)/2;
if (list[0]<list[mid])
high=mid-1;
else
low=mid+1;
}/*while*/
for (j=i-1;j>=(high+1);--j)
list[j+1]=list[j];
list[high+1]= list[0];
printf ("\n当前排序的结果是 :");
for (k=1;k<=len;++k){
printf ("%d,",list[k]);
if (k==i)
printf("=||=,");
}
}/*for*/
}
void Print(int *list,int len){
int i;
printf ("\nthe current sort values :");
for (i=1;i<=len;++i)
printf ("%d,",list[i]);
}/*Print*/
int main ( ){
int list[20];
int len=0;
int node,i;
printf ("\n请输入数字(退出输入0):");
scanf("%d,",&node);
while(node!=0){
list[++len]=node;
printf("\n请输入数字(退出输入0):");
scanf("%d,",&node);
}/*while*/
printf ("\nSource values :");
Print(list,len);
printf(" length=%d",len);
Binsort(list,len);
printf ("\n======sort values======= :");
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
Source values :
the current sort values :59,48,75,96,86,23,37,59,65,14, length=10
当前排序的结果是 :48,59,=||=,75,96,86,23,37,59,65,14,
当前排序的结果是 :48,59,75,=||=,96,86,23,37,59,65,14,
当前排序的结果是 :48,59,75,96,=||=,86,23,37,59,65,14,
当前排序的结果是 :48,59,75,86,96,=||=,23,37,59,65,14,
当前排序的结果是 :23,48,59,75,86,96,=||=,37,59,65,14,
当前排序的结果是 :23,37,48,59,75,86,96,=||=,59,65,14,
当前排序的结果是 :23,37,48,59,59,75,86,96,=||=,65,14,
当前排序的结果是 :23,37,48,59,59,65,75,86,96,=||=,14,
当前排序的结果是 :14,23,37,48,59,59,65,75,86,96,=||=,
======sort values======= :
the current sort values :14,23,37,48,59,59,65,75,86,96,请按任意键继续. . .