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

c语言插入排序及希尔排序详解

目录

前言:

插入排序:

希尔排序:


前言:

    排序在我们生活中无处不在,比如学生成就排名,商品价格排名等等,所以排序在数据结构的学习中尤为重要,今天就为大家介绍两个经典的排序算法:插入排序和希尔排序

插入排序:

思路图:

思路:

从第二个元素开始和前面的元素依次比较,如果前面的元素比它大,则将该元素移到后一位,如果该元素比它小,则直接插入该元素后面。

代码实现:

void InsertSort(int* a, int n)
{int i = 0;for (i = 0;i < n-1;i++){int end = i;int tmp = a[end + 1];while (end >= 0){if (a[end] > tmp){a[end + 1] = a[end];end--;}else{break;}}a[end + 1] = tmp;}
}

时间复杂度:

       最坏情况下为O(N*N),此时待排序列为逆序,或者说接近逆序
  最好情况下为O(N),此时待排序列为升序,或者说接近升序。
空间复杂度:O(1)

希尔排序:

  其实希尔排序就是插入排序的进阶版,可以说是希尔对插入排序进行了优化。

思路图:

思路:

步骤一:预排序,使数组接近有序

步骤二:插入排序

先将每间隔gap个元素的数据分为一组,将每组分别进行插入排序,使其接近有序

gap逐渐减小,gap减为1时就是进行步骤二的插入排序。

代码实现:

void ShellSort(int* a, int n)
{int gap = n;while(gap>1){gap = gap / 2;int i = 0;for (i = 0;i < n - gap; i++){int end = i;int tmp = a[end + gap];while (end >= 0){if (a[end] > tmp){a[end + gap] = a[end];end -= gap;}else{break;}}a[end + gap] = tmp;}}
}

纸上得来终觉浅,绝知此事要躬行。快去实践一下吧。

相关文章:

  • Spring Boot 常用注解分类
  • 开源框架Apache NiFi调研
  • NSSCTF Crypto靶场练习,21-30wp
  • Springboot入门篇
  • 自动数据增广论文笔记 | AutoAugment: Learning Augmentation Strategies from Data
  • Lua字符串(包含任意字符,如中文)任意位置截取
  • 新增模板中心和系统设置模块,支持飞书平台对接,DataEase开源数据可视化分析平台v2.1.0发布
  • Flink SQL: 高效解析 Kafka 数据并存储为 Parquet 至 HDFS
  • uni-app 微信小程序之好看的ui登录页面(四)
  • Kafka使用总结
  • 一、微前端目标、前端架构的前生今世、微前端架构优势和劣势、软件设计原则与分层
  • python socket编程9 - PyQt6界面实现UDP server/client 多客户端通讯的例子
  • docker的镜像创建 dockerfile
  • 【头歌-Python】Python第五章作业(初级)(7~16)
  • Mac安装DevEco Studio
  • express.js的介绍及使用
  • golang 发送GET和POST示例
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • nodejs调试方法
  • Python socket服务器端、客户端传送信息
  • SpiderData 2019年2月16日 DApp数据排行榜
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • Vue2 SSR 的优化之旅
  • 前端_面试
  • 赢得Docker挑战最佳实践
  • 自制字幕遮挡器
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • ​批处理文件中的errorlevel用法
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • #etcd#安装时出错
  • #大学#套接字
  • (27)4.8 习题课
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (TOJ2804)Even? Odd?
  • (第61天)多租户架构(CDB/PDB)
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (三)c52学习之旅-点亮LED灯
  • (四)模仿学习-完成后台管理页面查询
  • (一) springboot详细介绍
  • (译)2019年前端性能优化清单 — 下篇
  • (转)3D模板阴影原理
  • .NET 8.0 中有哪些新的变化?
  • .net core Swagger 过滤部分Api
  • .net打印*三角形
  • .sdf和.msp文件读取
  • @Bean, @Component, @Configuration简析
  • @Transaction注解失效的几种场景(附有示例代码)
  • [ vulhub漏洞复现篇 ] Jetty WEB-INF 文件读取复现CVE-2021-34429
  • [].shift.call( arguments ) 和 [].slice.call( arguments )
  • []指针
  • [【JSON2WEB】 13 基于REST2SQL 和 Amis 的 SQL 查询分析器
  • [20150904]exp slow.txt
  • [20181219]script使用小技巧.txt
  • [AutoSar NVM] 存储架构
  • [C#]winform制作圆形进度条好用的圆环圆形进度条控件和使用方法