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

ops/2024/11/24 3:34:19/

    希尔排序是针对插入排序的优化算法。它是缩少增量的算法,一开始增量从元素个数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.ppmy.cn/ops/136222.html

相关文章

迈向AI驱动的数据新时代:探索SQL Server 2025的全新向量数据库

随着科技的飞速发展&#xff0c;数据已成为推动各行各业进步的重要动力。而在这个数据爆炸的时代&#xff0c;如何高效地存储、检索和分析数据&#xff0c;成为了摆在我们面前的一大挑战。幸运的是&#xff0c;微软SQL Server 2025的推出&#xff0c;为我们带来了全新的向量数据…

【计算机网络】网段划分

一、为什么有网段划分 IP地址 网络号(目标网络) 主机号(目标主机) 网络号: 保证相互连接的两个网段具有不同的标识 主机号: 同一网段内&#xff0c;主机之间具有相同的网络号&#xff0c;但是必须有不同的主机号 互联网中的每一台主机&#xff0c;都要隶属于某一个子网 -&…

ubuntu dpkg 删除安装包

在Ubuntu中&#xff0c;可以使用dpkg命令来删除已安装的包。以下是删除安装包的基本命令&#xff1a; sudo dpkg -r package_name 这里package_name是你想要删除的包的名称。 如果你想要删除与该包相关的配置文件&#xff0c;可以使用以下命令&#xff1a; sudo dpkg -P pa…

基于Java Springboot医疗废弃物收运管理系统

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 数据…

如何在 Ubuntu 上安装 Mosquitto MQTT 代理

如何在 Ubuntu 上安装 Mosquitto MQTT 代理 Mosquitto 是一个开源的消息代理&#xff0c;实现了消息队列遥测传输 (MQTT) 协议。在 Ubuntu 22.04 上安装 MQTT 代理&#xff0c;您可以利用 MQTT 轻量级的 TCP/IP 消息平台&#xff0c;该平台专为资源有限的物联网 (IoT) 设备设计…

CSS3中的弹性布局之侧轴的对齐方式

1.对齐方式 &#xff08;1&#xff09;单行的情况&#xff1a; &#xff08;2&#xff09;多行的情况&#xff1a;

使用TensorFlow实现简化版 GoogLeNet 模型进行 MNIST 图像分类

在本文中&#xff0c;我们将使用 TensorFlow 和 Keras 实现一个简化版的 GoogLeNet 模型来进行 MNIST 数据集的手写数字分类任务。GoogLeNet 采用了 Inception 模块&#xff0c;这使得它在处理图像数据时能更高效地提取特征。本教程将详细介绍如何在 MNIST 数据集上训练和测试这…

前端框架主要做些什么工作

前端框架在Web开发中扮演着至关重要的角色&#xff0c;它们主要做以下几方面的工作&#xff1a; 一、简化和加速开发过程 前端框架通过提供预定义的组件、模块和代码库&#xff0c;使开发人员能够快速创建网站和应用&#xff0c;而无需从零开始编写大量的代码。这些框架通常包…