当前位置: 首页 > article >正文

利用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++));
    }

}


http://www.kler.cn/a/405671.html

相关文章:

  • 本地部署与外部部署有何不同?
  • Linux第96步_Linux中的宏DIV_ROUND_UP和BITS_TO_LONGS
  • 云原生之k8s服务管理
  • python oa服务器巡检报告脚本的重构和修改(适应数盾OTP)有空再去改
  • OpenGL 进阶系列14 - 曲面细分着色器
  • Python设计模式详解之1 —— 单例模式
  • springboot基于java语言的医疗设备管理系统
  • pytorch 的交叉熵函数,多分类,二分类
  • 经济增长初步
  • 初见哈希表容器,及哈希表模拟
  • NLP论文速读(CVPR 2024)|使用DPO进行diffusion模型对齐
  • 昨天刚发布的新机,把前置镜头彻底干没了
  • coe文件转mif(c语言)
  • Gooxi受邀参加海通证券AI+应用生态大会,助力数智金融高质量发展
  • DrugLLM——利用大规模语言模型通过 Few-Shot 生成生物制药小分子
  • 简易安卓句分器实现
  • 论文 | Learning to Transfer Prompts for Text Generation
  • 实现金蝶云星空与钉钉数据无缝集成的技术方法
  • Halo 正式开源: 使用可穿戴设备进行开源健康追踪
  • 02:spring之AOP
  • 原生openGauss与Oracle数据库函数兼容性对比验证测试
  • 一篇文章了解何为 “大数据治理“ 理论与实践
  • Spring监听的使用、原理、源码分析
  • 【Linux】常用命令练习
  • 筑起数字堡垒:解析AWS高防盾(Shield)的全面防护能力
  • 【Fargo】基于mediasoup发rtp包及内存清理