数据结构:排序|| 插入排序

Posted 赵同学的代码时间

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构:排序|| 插入排序相关的知识,希望对你有一定的参考价值。

直接插入排序对应顺序查找

逐个比较,挨个排序,一个一个地扩张有序列

特性:是稳定排序,随机访问

时间复杂度:O(n^2)

由于该算法非常好理解,就不再细讲辽


折半插入排序对应二分查找

通过二分查找的方式去找到待插入位置

void BInsertSort(Sqlist &L){ //对顺序表L作折半插入排序 for (int i = 2; i <= L.length(); i++) { L[0] = L[i]; //暂存 low = 1; high = i - 1; while (low <= high) { m = (low + high) / 2; if (L[0] < L[m]) high = m - 1; else low = m + 1; } //循环中进行二分修改指针 for (int j = i - 1; i >= high + 1; j--) L[j + 1] = L[j]; L[high + 1] = L[0]; //后移,然后插入 }}

特性:采用二分查找去定位,较快一点

时间复杂度:O(n^2)


2-路插入排序在折半排序基础上再改进

换取时间往往需要使用额外空间。

2-路插入排序的目的是减少排序过程中移动记录的次数

数据结构:排序(1)|| 插入排序

通过增设了两个指针并开了一个新数组的方式,一定程度上减少了数据的移动次数。读取时,从first读到final即可得到有序序列


前面的方法都无法避免移动序列,这是由于其顺序存储的存储结构导致的,若换用表的存储结构就可以避免移动序列,当然,牺牲了一部分的空间。

以上是关于数据结构:排序|| 插入排序的主要内容,如果未能解决你的问题,请参考以下文章

排序相关代码(数据结构笔试复测Leecode牛客)

数据结构图解七大排序

直接插入排序 ,折半插入排序 ,简单选择排序, 希尔排序 ,冒泡排序 ,快速排序 ,堆排序 ,归并排序的图示以及代码,十分清楚

[ 数据结构 -- 手撕排序算法第一篇 ] 插入排序

插入排序详解

排序算法之冒泡选择插入排序(Java)