数据结构:排序|| 插入排序
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-路插入排序的目的是减少排序过程中移动记录的次数
通过增设了两个指针并开了一个新数组的方式,一定程度上减少了数据的移动次数。读取时,从first读到final即可得到有序序列。
前面的方法都无法避免移动序列,这是由于其顺序存储的存储结构导致的,若换用表的存储结构就可以避免移动序列,当然,牺牲了一部分的空间。
以上是关于数据结构:排序|| 插入排序的主要内容,如果未能解决你的问题,请参考以下文章
直接插入排序 ,折半插入排序 ,简单选择排序, 希尔排序 ,冒泡排序 ,快速排序 ,堆排序 ,归并排序的图示以及代码,十分清楚