插入排序详解(c语言)

2024-06-08 1293阅读

插入排序

  • 一. 插入排序
    • 1.1 插入排序的图解及原理
    • 1.2插入排序的代码
    • 1.3插入排序的时间复杂度与稳定性

      一. 插入排序

      1.1 插入排序的图解及原理

      插入排序的步骤:

      .对于无序序列,其首项加入新的有序序列

      .遍历无序序列的元素,将其插入到有序序列的合适位置

      插入排序详解(c语言)

      上图是对插入排序的一个图解,接下来我们新建一个数组

      int a[5]={2,5,8,3,6}
      

      插入排序详解(c语言)

      假设要实现升序,我们可以发现前三个数组里的元素是有序的,那么只需要从第四个元素(即下标为3的元素)开始进行排序,那么前四个元素的排序分为以下几个步骤:

      1.定义变量存储当前位置的值

      注:假设[0,end]为有序数组,在这里end就是2,a[end+1]就是第四个元素

      int tmp=a[end+1];
      

      2.判断当前位置与上一个位置的大小关系,如果上一个位置比当前位置的值要大,就进行挪动覆盖,但是注意上一个位置的数暂时没变,因为要进行下一次比较,

      		while (end >= 0)
      		{
      			if (tmp  
      

      在这里

      第一次比较:

      插入排序详解(c语言)

      第二次比较:

      插入排序详解(c语言)

      第三次比较:

      插入排序详解(c语言)

      3.第2步其实只是一趟的代码,解析完后我们也发现其实我们没排第五个元素

      那么在最外面我们就要套一个循环来控制end这个变量,因为我们是假设[0,end]是有序的,但是这个数组一开始是未知的,所以我们遍历整个数组来控制end

      for (int i = 0; i  
      

      1.2插入排序的代码

      void InsertSort(int *a,int size)
      {
         	for (int i = 0; i = 0)
      		{
      			if (tmp  
      

      1.3插入排序的时间复杂度与稳定性

      首先提前告诉大家插入排序的时间复杂度是O(n^2),有人可能觉得这和冒泡排序一个样,毕竟循环里面套循环,但是可以很负责任大家,他们只是一个量级,插入排序比冒泡排序厉害的不是一星半点

      我们随机生成100000个数进行性能的测试:

      插入排序详解(c语言)

      插入排序详解(c语言)

      我们可以清晰的看到,插入排序比冒泡排序快将近10倍,因此同一个量级也分个高低

      插入排序时间复杂度的计算:

      • 显而易见的是,逆序的时候进行排序是最坏的情况

        这时候我们第一次需要1次排序,第二次2次,以此类推

        共进行1+2+3+…+(n-1)=(n^2-n)/2

        然后根据时间复杂度的计算规则得出插入排序最坏情况的时间复杂度为O(n^2)

      • 升序则是最好的情况

        但是我们还是要遍历一遍数组,因为我们一开始也不知道他是升序的,

        因此插入排序最好情况的时间复杂度为O(n)

      • 由以上可以知道插入排序的平均时间复杂度是O(N^2).

        插入排序的稳定性:

        插入排序是插入到比它大的数前面,所以插入排序是稳定的

        注:具体等写完八大排序算法再总结

        愿你的代码生涯如同登山,一步一个脚印,攀登到编程的高峰。

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]