排序算法 - 直接插入排序

简介: 排序算法 - 直接插入排序

1.什么是插入排序

直接插入排序是一种简单的插入排序法,其基本思想是:把待排序的记录按其关键码值的大小逐 个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 。 实际中我们玩扑克牌时,就用了插入排序的思想

2.插入排序有啥用

插入排序有以下几个用途:

对于少量元素的排序,它是一个有效的算法

对于已经接近排好序的数组,它的效率很高,时间复杂度为 O (N)

它可以作为其他复杂排序算法的一部分,例如快速排序

插入排序的精髓在于设置一个有序的空数组在它为空的时候就认定它为有序数组,并在不断插入的过程中维护其有序性,所以,我们实际上一直在干的事就是向一个有序数组中不断插入新元素,这比直接进行排序的操作手法要简单的多

3.插入算法的实现

当插入第i(i>=1)个元素时,前面的array[0],array[1],…,array[i-1]已经排好序,此时用array[i]的排 序码与array[i-1],array[i-2],…的排序码顺序进行比较,找到插入位置即将array[i]插入,原来位置 上的元素顺序后移

具体代码实现

//直接插入排序
void InsertSort(int* a, int n)//a是数组首元素地址,n是数组元素个数
{
  //[0-end]有序,end+1位置插进去,让[0-end+1]也有序
  int i = 0;
  int end = 0;
  for (i = 0; i < n - 1; i++)//对n个数进行排序,一共需要排n-1次
  {
    end = i;//下标标志end随着i的变化而变化
    int tmp = a[end + 1];//用tmp保存end+1位置的值,防止后面交换时丢失
    while (end >= 0)
    {
      if (a[end] > tmp)
      {
        a[end + 1] = a[end];//把a[end]赋给a[end+1](把较大值赋给较小值)(让较大值代替较小值)
        end--;//下标标志end-1;进行下一次循环,继续比较前两个数的值(a[end]和a[end+1]),
              //直到end == -1,不再进入循环
      }
      else//如果tmp大于a[end],则跳出循环,执行下一个for循环
      {
        break;
      }
    }
    a[end + 1] = tmp;//循环完之后,将--后的end再+1的位置换成tmp,就实现了(end+1位置插进去,让[0-end+1]也有序)
                     //如果循环完之后end没有--,则end+1位置还是tmp
  }
  //两个循环结束后,就排好了
}

4.总结

  1. 元素集合越接近有序,直接插入排序算法的时间效率越高
  2. 时间复杂度:O(N^2)
  3. 空间复杂度:O(1),它是一种稳定的排序算法
  4. 稳定性:稳定
相关文章
|
1月前
|
算法 搜索推荐
数据结构与算法学习十一:冒泡排序、选择排序、插入排序
本文介绍了冒泡排序、选择排序和插入排序三种基础排序算法的原理、实现代码和测试结果。
17 0
数据结构与算法学习十一:冒泡排序、选择排序、插入排序
|
1月前
|
搜索推荐 算法
【排序算法(一)】——插入排序,选择排序 —> 深层解析
【排序算法(一)】——插入排序,选择排序 —> 深层解析
|
4月前
|
算法 搜索推荐 C#
|
5月前
|
机器学习/深度学习 算法 搜索推荐
数据结构算法--2 冒泡排序,选择排序,插入排序
**基础排序算法包括冒泡排序、选择排序和插入排序。冒泡排序通过相邻元素比较交换,逐步将最大值“冒”到末尾,平均时间复杂度为O(n^2)。选择排序每次找到剩余部分的最小值与未排序部分的第一个元素交换,同样具有O(n^2)的时间复杂度。插入排序则类似玩牌,将新元素插入到已排序部分的正确位置,也是O(n^2)复杂度。这些算法适用于小规模或部分有序的数据。**
|
5月前
|
算法 搜索推荐
数据结构与算法-插入排序
数据结构与算法-插入排序
31 2
|
5月前
|
算法 搜索推荐 数据可视化
【漫画算法】插入排序:插入宝石的传说
【漫画算法】插入排序:插入宝石的传说
|
5月前
|
人工智能 搜索推荐 JavaScript
心得经验总结:排序算法:插入排序法(直接插入法和希尔排序法)
心得经验总结:排序算法:插入排序法(直接插入法和希尔排序法)
36 0
|
5月前
|
机器学习/深度学习 搜索推荐 算法
【C/排序算法】:直接插入排序和希尔排序
【C/排序算法】:直接插入排序和希尔排序
45 0
|
5月前
|
搜索推荐 算法
排序算法之插入排序
排序算法之插入排序
43 0
|
5月前
|
搜索推荐
排序算法---插入排序-----详解&&代码
排序算法---插入排序-----详解&&代码