插入排序(有代码)

简介: 插入排序(有代码)

核心思想:把一个数插入有序的数组中,end代表被比较值的下标,如果

不符合条件end的值会覆盖后一个值并且向前走,有合适的值就就会插入end的的后面

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 -= 1; 
      }
      else
      {
        break;
      }
    }
    a[end + 1] = tmp; 
  }
  
}


插入排序有很强的适应性,因为后面要插入时,前面已经是一个有序的数列,挪动数据的次数取决于要查如数据的大小,在很大程度上能减少消耗。时间复杂度:在逆序的时候挪动数据次数从1加到n - 1,是等差数列之和,所以是n^2这个量级。插入排序是一个稳定的排序,如果被比较的数据等于要插入的数据,就会把要插入的数据插入被比较的数据后面。

相关文章
|
1月前
|
搜索推荐
插入排序算法的讲解和代码
【10月更文挑战第12天】插入排序是一种基础的排序算法,理解和掌握它对于学习其他排序算法以及数据结构都具有重要意义。你可以通过实际操作和分析,进一步深入了解插入排序的特点和应用场景,以便在实际编程中更好地运用它。
|
6月前
|
算法
桶排序(简化版)与冒泡排序
桶排序(简化版)与冒泡排序
38 0
|
3月前
|
搜索推荐 算法 Shell
排序(冒泡排序、选择排序、插入排序、希尔排序)-->深度剖析(一)
排序(冒泡排序、选择排序、插入排序、希尔排序)-->深度剖析(一)
182 5
|
3月前
|
C++
【CPP】插入排序:直接插入排序、希尔排序
【CPP】插入排序:直接插入排序、希尔排序
|
4月前
|
算法
快排(代码的实现)
快排(代码的实现)
|
5月前
|
机器学习/深度学习 算法 搜索推荐
数据结构算法--2 冒泡排序,选择排序,插入排序
**基础排序算法包括冒泡排序、选择排序和插入排序。冒泡排序通过相邻元素比较交换,逐步将最大值“冒”到末尾,平均时间复杂度为O(n^2)。选择排序每次找到剩余部分的最小值与未排序部分的第一个元素交换,同样具有O(n^2)的时间复杂度。插入排序则类似玩牌,将新元素插入到已排序部分的正确位置,也是O(n^2)复杂度。这些算法适用于小规模或部分有序的数据。**
|
5月前
|
人工智能 搜索推荐 JavaScript
心得经验总结:排序算法:插入排序法(直接插入法和希尔排序法)
心得经验总结:排序算法:插入排序法(直接插入法和希尔排序法)
39 0
|
存储 算法 搜索推荐
数据结构各内部排序算法总结对比及动图演示(插入排序、冒泡和快速排序、选择排序、堆排序、归并排序和基数排序等)2
数据结构各内部排序算法总结对比及动图演示(插入排序、冒泡和快速排序、选择排序、堆排序、归并排序和基数排序等)2
255 0
|
6月前
|
搜索推荐 Java
java实现冒泡排序和快速排序代码
java实现冒泡排序和快速排序
53 1
|
6月前
|
搜索推荐 算法 程序员
常见排序算法原理及实现——第一部分(冒泡排序、插入排序和选择排序)
常见排序算法原理及实现——第一部分(冒泡排序、插入排序和选择排序)