希尔排序

O(∩_∩)O


希尔排序

优点:时间复杂度为nlog₂n 先对于插入排序而言
	 能够较为快速的排序数组。

 81 void shell_sort(int arr[],int n){
 82     int step,i,j;
 83     for(step = n/2;step>0;step=step/2){
 84         for(i=step;i<n;i++){
 85             int key=arr[i];
 86             for(j = i-step;j>=0&&key<arr[j];j = j-step){
 87                 arr[j+step] = arr[j];
 88             }
 89             arr[j+step] = key;
 90         }
 91     }
 92 }

     int arr[10]={1,99,72,444,351,624,151,4125,9,60};
升序排序
step=5,
		i=5 j=0
		i=6,j=1
		i=7,j=2
		i=8,j=3
		i=9,j=4
key=arr[i],如果,key<arr[j],先进行拷贝

1,99,72,9,60,624,151,4125,444,351

step=2,
		i=2,j=0
		i=3,j=1
		i=4,j=2, 0
		i=5,j=3,1
		i=6,j=4,2,0
		i=7,j=5,3,1
		i=8,j=6,4,2,0
		i=9,j=7,5,3,1
同理,key<arr[j],进行拷贝,找到不大于key的差距为step的下标把值赋为key。
以上的j只是最坏结果有时不满足条件会直接退出

1,9,60,99,72,351,151,624,444,4125

step=1
		i=1,j=0,
		i=2,j=1,0
		i=3,j=2,1,0
		i=4,j=3,2,1,0
		i=5,j=4,3,2,1,0
		i=6,j=5,4,3,2,1,0
		i=7,j=6,5,4,3,2,1,0
		i=8,j=7,6,5,4,3,2,1,0
		i=9.j=8,7,6,5,4,3,2,1,0
同理,key<arr[j],进行拷贝,找到不大于key的差距为step的下标把值赋为key。
以上的j只是最坏结果有时不满足条件会直接退出

1,9,60,72,99,151,351,444,624,4125
大家自己能够再推一遍,我觉得这种排序还是比较有用的,能够减少数组排序时间,如果大家有刷过PAT就知道了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值