其他分享
首页 > 其他分享> > 希尔排序

希尔排序

作者:互联网

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就知道了

标签:151,arr,int,step,希尔,key,排序
来源: https://blog.csdn.net/qq_52575999/article/details/119331719