数据结构与算法 ~ 排序 ~ 折半插入排序

数据结构与算法 ~ 排序 ~ 折半插入排序

/*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,请按任意键继续. . .

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值