欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 文化 > 利用c语言详细介绍下希尔排序

利用c语言详细介绍下希尔排序

2025/2/22 2:07:10 来源:https://blog.csdn.net/tpc4289/article/details/143961981  浏览:    关键词:利用c语言详细介绍下希尔排序

    希尔排序是针对插入排序的优化算法。它是缩少增量的算法,一开始增量从元素个数len/2的增量开始,然后缩小增量gap=gap/2,直到gap为1,最终完成序列排序。

一、图文介绍

    我们还是使用数组【10,5,3,20,1],排序使用升序的方式,小的元素在前,大的元素在后:

1.1,内循环第一遍

    初始增量为gap=length/2=5/2=2,所以我们第一遍数组第三元素(我们用a[2]表示,后面也是)和a【0】比对,a[3]和a[1]比对,a[4]和a[2]比对再与a[0]比对。

1.2,内循环第二遍

    内循环第二部,增量变为gap=gap/2=2/2=1,这个时候就变成插入排序了,我们根据前面排序出来的结果,列出结果(插入排序前面我们有介绍,我们简单图陈列下过程):

     第一次:

    第二次:

 

    第三次:

 

    第四次:

 

二、算法实现

2.1,希尔排序

    我们用c语言写一个希尔排序算法的函数:

int * shellSort(int *arr,int len)
{int cur;for(int gap = len/2; gap > 0; gap = gap/2){for(int i = gap;i < len;i++){int j = i;cur = arr[i];while(j - gap >= 0 && cur < arr[j - gap]){arr[j] = arr[j - gap];j = j - gap;}arr[j] = cur;}}return arr;
}

2.2,程序测试:

int main() {int a[]={10,5,3,20,1};int *p = shellSort(a,5);printf("the array a after sort is ");for(int i=0;i<5;i++){printf("%d ", *(p++));}}

版权声明:

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

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

热搜词