希尔排序

希尔排序

先取一个小于n的整数d1作为第一个增量 ,把文件的全部记录分组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序 ;然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量
   
=1(
   
<
   
…<d2<d1),即所有记录放在同一组中进行直接插入排序为止。
# include <stdio.h>

void HillSort(int *num, int length){
	int i, j, temp, gap, t;
	
	for(gap = length/2; gap>0; gap/=2){//确定增量 
		for(i=0; i<=gap; i++){//确定分组 
			for(j = i+gap; j<length; j+=gap){//进行插入排序 
				if(num[j-gap]>num[j]){
					temp = num[j];
					t = j-gap;
					while(t>=0&& num[t]>temp){
						num[t+gap] = num[t];
						t-=gap;
					}
					num[t+gap] = temp;
				}
			}
		}
	}
	
	return ;
} 
	
int main(void){
	int num[]={9,8,7,6,5,4,3,2,1,0};
	int length = 10;
	HillSort(num, length);
	for(int i = 0 ;i < 10; i++){
		printf("%d ", num[i]);
	}
	printf("\n");
	return 0; 
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值