插入排序——直接插入排序

1、直接插入排序:

从第二个元素开始,与前面的元素做比较,小则插到前面去。

直接插入排序属于稳定性排序:关键词相同的数据元素将保持原有位置不变,(关键在于指定下标必须要小于判断值才做位置变化,当出现两个相同的数据时,并不会交换位置)

实现步骤:

  • 已知列表a,从第二个元素开始,下标记为i ,将i对应的值保存在临时变量tmp 中;
  • 将 i 的前一个元素记录为 j ,j = i - 1;
  • 判读 j 的值和 i 的值的大小,如果tmp < list[j] 的值,则将 j 往后挪,也就是 list[j+1] = list[j], 同时 j的下标向前移动 继续做与 tmp 的值的判断。
  • 直到 tmp 不小于 list[j], 将tmp 放到 list[j + 1] 中。

2、复杂度

时间复杂度:O(n²)

空间复杂度:O(1)

3、稳定性:稳定排序

当元素小于前一个数据才向前插入,当出现相同的数据时,是不小于的,所以为稳定排序。

4、例子:

cpp 复制代码
#include <iostream>
using namespace std;
// 直接插入
int main() {
    int list[8] = {45, 38, 66, 90, 88, 10, 25, 45};
       
    int len = sizeof(list)/sizeof(list[0]);

    for (int i = 1; i < len; i++) {
       int tmp = list[i], j = i - 1;
       while (j >= 0 && tmp < list[j]) {
           list[j+1] = list[j];
           j--;
       }
       list[j+1] = tmp;
       
       
       cout<<i<<"次排序后:";
       for (int a = 0;a < len;a++) {
           cout << list[a] << " ";
       }
       cout<<endl;
    }


    cout<<"最后结果:";
    for (int i = 0;i < len;i++) {
        cout << list[i] << " ";
    }
    return 0;
}

输出结果:

cpp 复制代码
1次排序后:38 45 66 90 88 10 25 45 
2次排序后:38 45 66 90 88 10 25 45 
3次排序后:38 45 66 90 88 10 25 45 
4次排序后:38 45 66 88 90 10 25 45 
5次排序后:10 38 45 66 88 90 25 45 
6次排序后:10 25 38 45 66 88 90 45 
7次排序后:10 25 38 45 45 66 88 90 
最后结果:10 25 38 45 45 66 88 90

参考:

百度百科------排序算法:百度百科-验证

生命不息,学习不止,若有不正确的地方,欢迎指正。

相关推荐
代码中介商18 小时前
排序算法完全指南(五):快速排序深度详解
数据结构·算法·排序算法
清木!1 天前
排序算法比较
数据结构·算法·排序算法
Noushiki2 天前
常见的排序算法
算法·排序算法
历程里程碑2 天前
56 . 高效ET非阻塞IO服务器设计指南
java·运维·服务器·开发语言·数据结构·c++·排序算法
代码中介商3 天前
排序算法完全指南(三):插入排序深度详解
算法·排序算法
承渊政道3 天前
【贪心算法】(经典实战应用解析(六):整数替换、俄罗斯套娃信封问题、可被三整除的最⼤和、距离相等的条形码、重构字符串)
c++·算法·leetcode·贪心算法·排序算法·动态规划·哈希算法
WL_Aurora3 天前
Python 算法基础篇之排序算法(二):希尔、快速、归并
python·算法·排序算法
薇茗3 天前
【初阶数据结构】 升沉有序的平仄 排序 3
c语言·开发语言·数据结构·算法·排序算法·文件归并排序
薇茗3 天前
【初阶数据结构】 升沉有序的平仄 排序 2
c语言·数据结构·算法·排序算法·快排精讲
WL_Aurora4 天前
Python 算法基础篇之排序算法(一):冒泡、选择、插入
python·算法·排序算法