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

八大排序之直接插入排序

今天我们来学习八大排序中的直接插入排序。话不多说,直接上动图。

直接插入排序的主要思想是:当数组只有一个元素的时候,我们可以认为该数组是有序的。所以我们可以选择一个元素放进数组(一般为待排数据的第一个元素)。然后开始排序:找到第二个待排序的数据,把这个元素视为数组里面的元素。(但我们并不知道由于新进一个元素,这个数组是否是有序的)所以要与之前的已经排好序的数组中的元素一一比较,使新数组有序。(假如我们排大序)如果新插入的元素比前一个元素的大,则把新插入的元素放在当前数组的位置然后退出循环(此时数组符合排大序)。如果新插入的元素比前一个元素小,不符合我们排大序的规则,所以我们把前一个元素替换到新插入的元素的位置,同时要保存新插入元素的值(因为新插入元素会被覆盖掉),然后前一个元素的位置视为新插入元素的位置进行与这个位置的前一个位置比较。这样一套下来,我们的新数组就会有序了。然后我们继续添加新的元素放在数组的末尾,重复上面的流程,直到添加完所有待排序的元素为止。

void Insert_Sort(int* arr, int n)           //arr存放待排序的数组,n则是数组的元素个数
{for (int i = 0; i < n - 1; i++){int end = i;               // i为当前有序数组的右边界,i + 1则是待排序元素的下标int tmp = arr[end + 1];      //保存待排序数据的值while (end >= 0){                                     if (arr[end] > tmp){arr[end + 1] = arr[end]; //如果待插入元素的值小于数组的右边界的值则替换end--;               //数组边界。同时数组的右边界下标减1.}else{break;               //如果当前位置的前一个下标的值小于该插入数据的值,则停止循环}}arr[end + 1] = tmp;         //把待插入元素的值放在end + 1下标下,即当前下标的值
}

相关文章:

  • ELK日志系统
  • Kubernetes控制平面组件:高可用 APIServer
  • 详解反射型 XSS 的后续利用方式:从基础窃取到高级组合拳攻击链
  • 定制一款国密浏览器(10):移植SM2算法前,解决错误码的定义问题
  • 【Linux】软件管理机制和软件安装
  • 软件测试--自动化测试1
  • 【操作系统原理02】进程的描述与控制
  • 基于机器学习 LSTM 算法的豆瓣评论情感分析系统
  • matlab论文图一的地形区域图的球形展示Version_1
  • 【Matlab】中国东海阴影立体感地图
  • 梅施CPQ + AI:开启智能AI与报价软件的新潮流
  • 大模型Rag - 文本分块
  • libevent的bufferevent测试用例和使用方法(附带源码)
  • 腾讯wxg企业微信 后端开发一面
  • 基于Ubuntu2504部署OpenStack E版
  • uv:重新定义Python开发效率的下一代工具链
  • GNU,GDB,GCC,G++是什么?与其他编译器又有什么关系?
  • Android TTY设备调用流程和简单分析
  • Vue3 本地打包启动白屏解决思路!! !
  • Springboot+vue3开发项目——热点事件
  • 云南昭通一公园发现毒饵,多只宠物狗疑中毒致死
  • “女子被前男友泼汽油烧伤案”二审将于22日开庭,一审判12年
  • 经济日报金观平:拥抱中国就是拥抱确定性
  • 从黄仁勋到美国消费者,都在“突围”
  • 解读丨连续两日施压,特朗普为何着急让美联储降息
  • 译者手记|如何量化家庭历史