希尔排序

参考链接:https://mp.weixin.qq.com/s/4kJdzLB7qO1sES2FEW0Low

改造直接插入排序: 加入gap,1变为gap

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int a[10010];
int XInsSort(int n) {
	int cur;
	//在插入排序的基础上增加了一个控制增量(gap)的循环 
	//最初为数组长度的一半
	//下一次增量为上一个增量的一半,最终增量为1就是一组 
	for(int gap=n/2;gap>0;gap/=2) {//分组 
		for(int i=gap;i<n;i++){//对各个分组进行直接插入排序 
			cur=a[i];
			int j=i-gap;//插入之前定义j,改变j-1 
			for(;(j>=0)&&(cur<a[j]);j-=gap){//j--改为 j-=gap
				a[j+gap]=a[j];//改a[j+1]=a[j]; 
			}
			a[j+gap]=cur;//改a[j+1]=cur; 
		}
	} 
}
int main()
{
	int n=7;
	for(int i=0;i<n;i++){
    	cin>>a[i];
    }
    XInsSort(n);
    for(int i=0;i<n;i++){
    	cout<<a[i]<<" ";
    }
	cout<<endl;
	return 0;
}

无注释代码

 

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int a[10010];
int XInsSort(int n) {
	int cur;
	for(int gap=n/2;gap>0;gap/=2) {
		for(int i=gap;i<n;i++){ 
			cur=a[i];
			int j=i-gap;
			for(;(j>=0)&&(cur<a[j]);j-=gap){
				a[j+gap]=a[j];
			}
			a[j+gap]=cur; 
		}
	} 
}
int main()
{
	int n=7;
	for(int i=0;i<n;i++){
    	cin>>a[i];
    }
    XInsSort(n);
    for(int i=0;i<n;i++){
    	cout<<a[i]<<" ";
    }
	cout<<endl;
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Clark-dj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值