插入排序:直接插入排序、希尔排序详细说明

server/2024/11/13 5:32:35/

插入排序

基本思想:直接插入排序是⼀种简单的插入排序法,其基本思想是:把待排序的记录按其关键码值的大小逐个插入到⼀个已经排好序的有序序列中,直到所有的记录插入完为止,得到⼀个新的有序序列。

在玩扑克牌整理手中的牌时,我们就需要将手中的牌按一定规律整理好。实际中我们玩扑克牌时,就⽤了插⼊排序的思想。

在插入排序当中分为直接插入排序以及希尔排序

直接插入排序

当插⼊第 i(i>=1) 个元素时,前⾯的 ⽤ a array[0],array[1],…,array[i-1] 已经排好序,此时 rray[i] 的排序码与 即将 array[i-1],array[i-2],… 的排序码顺序进⾏⽐较,找到插⼊位置 array[i] 插⼊,原来位置上的元素顺序后移

下面就是直接插入排序的思想以及动态展示图

void InsertSort(int* a, int n) 
{for (int 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;}
}

希尔排序

希尔排序法又称缩小增量法。

希尔排序法的基本思想是:先选定⼀个整数(通常是gap= n/3+1),把待排序⽂件所有记录分成各组,所有的距离相等的记录分在同⼀组内,并对每⼀组内的记录进⾏排序,然后gap=gap/3+1得到下⼀个整数,再将数组分成各组,进⾏插入排序,当gap=1时,就相当于直接插入排序。 它是在直接插入算法>排序算法的基础上进行改进而来的,综合来说它的效率肯定是要高于直接插入算法>排序算法的。

void ShellSort( int* a, int n) 
{int gap = n;while (gap > 1){//推荐写法:除3 gap = gap / 3 + 1;for (int 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;}} 
}


http://www.ppmy.cn/server/111401.html

相关文章

捷邻系统小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;商品分类管理&#xff0c;商品信息管理&#xff0c;促销产品管理&#xff0c;订单管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;商品信息&#…

如何用JavaWeb技术开发旅行社网站系统?详解步骤与技巧

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

航空制造领域中三维工艺技术的应用

飞机制造企业可以通过三维数字化技术的应用有效提升了工艺设计水平&#xff0c;解决了在航空产品数字化工艺设计、制造方面的标准统一和系统整合等问题&#xff0c;保证了业务应用系统基础数据的一致性和规范性。本文是对航空制造领域中三维工艺技术的应用的介绍。 随着信息化技…

服务器托管需要考虑到哪些因素?

企业在选择服务器租用业务时&#xff0c;需要考虑服务器的性能如何&#xff0c;在配置方面是否符合自己的要求等多种因素&#xff0c;那企业如果选择服务器托管业务时需要考虑哪些因素呢&#xff1f; 本文就一起来探讨一下这个问题吧&#xff01; 在选择服务器托管时企业需要考…

UNO小游戏2

前言 hello&#xff0c;大家好我是文宇。最近也是抽出时间更一期了。 bug还是很多&#xff08;恼&#xff09;&#xff0c;所以就当个乐子看看&#xff0c;反正后面还会有的&#xff0c;先把这玩意儿发了再说。 正文 #include<bits/stdc.h> #include<windows.h>…

RabbitMQ 是什么?应用场景有哪些?

RabbitMQ 是一个实现了高级消息队列协议&#xff08;AMQP&#xff09;的开源消息代理软件。 一、RabbitMQ 的特点 它具有以下主要特点&#xff1a; 1. 可靠性高&#xff1a;确保消息能够可靠地传输&#xff0c;即使在网络故障或服务器故障的情况下也能保证消息不丢失。 2. …

一种误差较小的轮廓面积计算算法

1.背景 基于微分思想的轮廓面积计算方法之一是将多边形轮廓边与X轴会Y轴进行围合&#xff0c;形成一个个梯形&#xff0c;每个梯形的面积有符号&#xff0c;累计求和即得到多边形轮廓的面积。详见博主之前的文章&#xff0c; 记录导致计算轮廓面积出错的一个坑点-CSDN博客文章…

数据切分的艺术:使用PyTorch的torch.utils.data.random_split精粹指南

数据切分的艺术&#xff1a;使用PyTorch的torch.utils.data.random_split精粹指南 在机器学习项目中&#xff0c;合理地分割数据集至关重&#xff0c;它不仅关系到模型训练的有效性&#xff0c;还直接影响到模型的泛化能力。PyTorch提供了一个强大的工具torch.utils.data.rand…