希尔排序(C语言)

news2024/11/17 17:42:56

希尔排序

  • 一、希尔排序的原理
  • 二、动图演示
  • 三、代码实现
  • 四、实现从小到大排序
  • 五、希尔排序的优缺点

一、希尔排序的原理

希尔排序是插入排序的一种更高效的改进版本。
1.将原始待排数据按照设定的增量gap分成多组,每组有n / gap个元素。
2.对这些分组进行插入排序,从第二个元素开始把它与前一个元素比较,如果比前一个元素小,则交换这两个元素,再与前面的元素比较,直到已排序的元素比当前元素小或与第一个元素比较完毕为止。插入排序保证了每个小组内部元素的有序。
3.重新设定增量gap,重复上述步骤直到gap为1,此时,排序结束。

二、动图演示

在这里插入图片描述

三、代码实现

void shellSort(int arr[], int n) 
{
    int i, j, gap, temp;
    for (gap = n / 2; gap > 0; gap /= 2)  // 初始间隔为数组长度的一半
    {
      
        for (i = gap; i < n; i++) // 对每个子序列进行插入排序
        {
            temp = arr[i]; // 将当前元素保存在临时变量中
            j = i;
            while (j >= gap && arr[j - gap] > temp) // 在子序列中逐个将元素向后移动gap个位置
            {
                arr[j] = arr[j - gap];
                j -= gap;
            }
            arr[j] = temp; // 将临时变量的值插入到正确的位置
        }
    }
}

四、实现从小到大排序

输入10个数字并将其从小到大排

#include <stdio.h>

void shellSort(int arr[], int n) 
{
    int i, j, gap, temp;
    for (gap = n / 2; gap > 0; gap /= 2) 
    {
      
        for (i = gap; i < n; i++)
        {
            temp = arr[i]; 
            j = i;
            while (j >= gap && arr[j - gap] > temp)动gap个位置
            {
                arr[j] = arr[j - gap];
                j -= gap;
            }
            arr[j] = temp;
        }
    }
    for (i = 0; i < n; i++)
    {
        printf("%d ", arr[i]);
    }
}

int main()
{
    int arr[10];
    for (int i = 0; i < 10; i++)
    {
        scanf("%d", &arr[i]);
    }
    shellSort(arr, 10);
    return 0;
}

在这里插入图片描述

五、希尔排序的优缺点

优点:
1、希尔排序相对于其他O(n^2)排序算法来说,性能较优。
2、希尔排序是一种不稳定的排序算法,但相比较于快速排序、堆排序等不稳定的排序算法,实现上要简单得多。
3、对于堆排序和快速排序,从数据结构的角度来说,基于交换排序的索引很难被维护并活用,而希尔排序正好是借助了交换排序的思想,来实现基于存储的更加紧凑数据设计的升级。

缺点:
1、尽管希尔排序在性能上相对于其他O(n^2)排序算法有较大的提高,但相对于O(N·logN)的排序算法来说,还是较慢。
2、希尔排序的增量序列难以选择,为了达到比较好的排序效果,需要对不同情况选择不同的增量序列。
3、希尔排序不稳定,也就是说,如果关键字相等的两个记录在排序前后的相对位置发生改变,那么这种排序算法就是不稳定的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/705662.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux 学习记录43(C++篇)

Linux 学习记录43(C篇) 本文目录 Linux 学习记录43(C篇)一、友元1. 友元函数(1. 全局函数作为友元函数(2. 类中的成员函数作为友元 2. 友元类3. 友元的注意事项 二、常成员函数和常对象(const)1.常成员函数2. 常对象3. mutable 关键字 三、运算符重载1. 常见的运算符2. 运算符重…

【海思SS528 | MPP】音频例程 sample_audio.c 源码阅读笔记

目录 一、概述二、main 函数解析三、main_inner 函数解析四、sample_audio_ai_ao 函数解析4.1 Audio Codec相关配置 五 一、概述 上篇文章 【海思SS528】MPP媒体处理软件V5.0 | 音频模块 - 学习笔记 学习了海思MPP媒体处理平台的一小部分音频知识&#xff0c;这篇文章继续学习与…

(5)深度学习学习笔记-多层感知机

文章目录 多层感知机和激活函数代码来源 多层感知机和激活函数 通过在网络中加入一个或多个隐藏层来克服线性模型的限制&#xff0c;使其能处理更普遍的函数关系类型。最简单的方法是将多个全连接层堆叠在一起。每一层都输出到上面的层&#xff0c;直到生成最后的输出&#xf…

Android12之ServiceManager::addService添加服务的本质(一百五十八)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药. 更多原创,欢迎关注:Android…

Python-创建虚拟环境并指定环境目录

1.简介 程序运行依赖于环境&#xff0c;不同程序依赖的环境不尽相同。如果一个项目依赖于一个第三方库的1.0版本&#xff0c;另一个项目依赖于这个第三方库的2.0版本&#xff0c;在一个python环境中一个库只能同时存在一个版本&#xff0c;所以就产生了版本冲突。虚拟环境就是为…

git 显示不出图标

今天写完代码准备上传 gitee 的时候发现&#xff0c;自己的本地文件夹没有小绿勾了&#xff0c;整的我一时分不清到底哪些文件已经上传过。 研究了半天终于搞定了&#xff0c;现在把方法记录下来&#xff0c;防止以后继续出现这种问题还要找半天。 1. 打开注册表 win R 打开运…

【Python 随练】按键变色

题目&#xff1a; Press any key to change color, do you want to try it. Please hurry up! 简介&#xff1a; 在本篇博客中&#xff0c;我们将解决一个编程问题&#xff1a;按下任意键改变颜色。我们将提供一个完整的代码示例来实现这个功能&#xff0c;并鼓励读者尝试。…

亚马逊云科技自研芯片,为企业云服务提高性价比

6月27日至28日&#xff0c;2023亚马逊云科技中国峰会于上海顺利召开。在本次峰会上&#xff0c;似乎找寻到了云计算领域竞争对手均日渐成熟&#xff0c;而亚马逊云科技却能一直保持领先地位的原因——过去的十几年里&#xff0c;亚马逊云科技“基于客户需求&#xff0c;快速进行…

gnutls_handshake() failed: The TLS connection was non-properly terminated.

从远程仓库获取所有更新&#xff0c;并保存在本地时&#xff0c;使用git fetch 命令时出现如下错误&#xff1a; 解决办法&#xff1a; 问题解决&#xff1a; 参考资料 拉取github报错 gnutls_handshake() failed: The TLS connection was non-properly terminated. git获取…

proteus三级管(NPN)仿真LED灯串的开关

实验里设置LED灯的导通电压为1.2V 打开仿真开关后可以看到&#xff0c;此时三极管不导通&#xff0c;LED灯亮了&#xff0c;并且电压表和电流探针有数值显示 按下按键&#xff0c;三级管导通&#xff0c;LED灯灭

Spring MVC相关注解运用 —— 上篇

目录 一、Controller、RequestMapping 1.1 示例程序 1.2 测试结果 二、RequestParam 2.1 示例程序 2.2 测试结果 三、RequestHeader、CookieValue 3.1 示例程序 3.2 测试结果 四、SessionAttributes 4.1 示例程序 4.2 测试结果 五、ModelAttribute 5.1 示例程序 …

4G/wifi/lora投入式无线液位传感变送器 mqtt/http协议对接云平台

1.产品概述 DAQ-GP-TLL4G无线液位传感器终端是上海数采物联网科技有限公司推出的一款无线液体水位测量产品。原理是利用扩散硅片上的一个惠斯通电桥&#xff0c;被测介质&#xff08;气体或液体&#xff09;施压使桥壁电阻值发生变化&#xff08;压阻效应&#xff09;&#xff…

A_B_C滑块

分享一个有意思的滑块。 网址:https://xxgs.chinanpo.mca.gov.cn/gsxt/newList 图片好看,不知道说啥了,验证部分。 ok,源码在这,自提。 # -*- coding:utf-8 -*- # author: qinshaowen # V:15702312233 import requests,base64 import execjs,ddddocr from loguru impo…

Springboot 集成Prometheus 数据采集 使用grafana 监控报告告警 邮件配置

目录 Springboot 相关 Pom 重点包 如果有需要可以增加安全包-一般内部机房没啥事-&#xff08;非必选&#xff09; Application.yml配置文件-&#xff08;非必选&#xff09; Application.properties management.endpoints.web.exposure.include介绍 启动类 查看监控信…

[RocketMQ] Producer发送单向/异步/同步消息源码 (八)

文章目录 1.sendMessage方法发送消息2.invokeOneway单向发送2.1 invokeOnewayImpl单向调用 3.sendMessageSync同步发送3.1 invokeSync同步调用3.1.1 invokeSyncImpl同步调用实现3.1.2 processSendResponse处理响应结果 4.sendMessageAsync异步发送消息4.1 invokeAsync异步调用4…

信号链噪声分析16

文章目录 概要整体架构流程技术名词解释技术细节小结 概要 提示&#xff1a;这里可以添加技术概要 上世纪 50、60 年代&#xff0c;积分非线性度、差分非线性度、单调性、无失码、增益误差、 失调误差、漂移等直流性能规格主要用于表示数据转换器的性能特性。在当时&#xff0…

【企业架构框架】SOGAF 运营模式

Salesforce 运营、治理和架构框架 (SOGAF) 将 MIT-CISR 企业架构框架应用于 Salesforce 实施和程序。 介绍 运营模式有两个维度&#xff1a;业务流程标准化和业务流程集成。业务流程和相关系统的标准化意味着准确定义流程的执行方式。运营模式可提高整个公司的效率和可预测性。…

网络通讯录服务器

文章目录 六、通讯录4.0实现---⽹络版1. 环境搭建1.1 安装Httplib库1.1升级 gcc 2. 搭建简单的服务器3. 约定双端交互接⼝4. 代码实现客户端5. 代码实现服务端 六、通讯录4.0实现—⽹络版 简易版本 服务端完整版本 客户端完整版本 Protobuf还常⽤于通讯协议、服务端数据交换…

【物联网无线通信技术】802.11无线安全认证

本文由简入繁介绍了IEEE802.11i无线局域网安全技术的前世今生&#xff0c;帮助路由器开发者对WLAN的加密安全策略有一个概念上的认知&#xff0c;能够更好地分析STA掉线以及漫游等问题。 目录 WEP WPA WPA/WPA2-PSK认证过程 802.11i WEP WEP是Wired Equivalent Privacy的简…

基于matlab使用扩张卷积的语义分割(附源码)

一、前言 使用扩张卷积训练语义分割网络。语义分割网络对图像中的每个像素进行分类&#xff0c;从而生成按类分割的图像。语义分割的应用包括自动驾驶的道路分割和医疗诊断的癌细胞分割。 二、加载训练数据 该示例使用 32 x 32 个三角形图像的简单数据集进行说明。数据集包括…