您的位置:首页 > 财经 > 产业 > 网站程序开发公司_网站运营的主要内容_流量神器_市场seo是什么意思

网站程序开发公司_网站运营的主要内容_流量神器_市场seo是什么意思

2024/11/17 10:56:38 来源:https://blog.csdn.net/2301_79894844/article/details/142357357  浏览:    关键词:网站程序开发公司_网站运营的主要内容_流量神器_市场seo是什么意思
网站程序开发公司_网站运营的主要内容_流量神器_市场seo是什么意思

希尔排序的底层是插入排序,

不了解插入排序的友友可以先看我下面这篇文章:

插入排序详解-CSDN博客

思路

就整体而言,希尔排序不过是多用了几次插入排序,

预排序→插入排序,

预排序的作用是让数组元素更接近于有序,

以缩短最后插入排序的时间,

达到优化插入排序的效果。

预排序走的也是插入排序,

但是元素与元素之间的间隔不是1,而是gap(我们自己定义的,有计算公式),

而且gap会越来越小,

直至gap等于1,

就是正统的插入排序

画个粗略的图让大家理解一下:

下图有11个元素,

gap1=11/3+1=4,

gap2=gap1/3+1=4/3+1=2,

gap3=gap2/3+1=2/3+1=1.

建议大家看图时配合代码一起食用。

代码

void ShellSort(int* arr, int n)
{int gap = n;while (gap>1){gap = gap / 3 + 1;//这条式子可以保证gap最后一定为1,走一遍插入排序//i<n-gap,即i的最大值为n - gap - 1,保证数组不越界,因为tmep最大取到了arr[end + gap]for (int i = 0; i < n - gap; i++){
//下面的框架和思想基本与插入排序一致int end = i;int temp = arr[end + gap];while (end >= 0){if (temp < arr[end]){arr[end + gap] = arr[end];end -= gap;}else{break;}}arr[end + gap] = temp;}}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com