排序算法之插入排序

来源:互联网 发布:4行4列矩阵的值怎么求 编辑:程序博客网 时间:2024/06/03 23:45

首先了解两个概念:

1. 内排序和外排序

内排序,参加排序的数据量不大,在排序过程中可以将所有参加排序的数据存放在内存中处理的排序方法。

外排序,参加排序的数据量很大,以至于内存不足以一次存放全部数据,在排序过程中需要通过内存与外存之间的数据交换来达到排序目的的排序方法。

2. 稳定性排序与非稳定性排序

参加排序的项称为排序码或者排序项。

这个概念是针对的是有多个相同的排序项参加排序的情况。若采用排序方法排序后这些相同的排序项的相对位置与排序之前保持不变,则称此排序方法是稳定性排序,否则为非稳定性排序。

例如,参加排序的依次是:a1 = 3, a2 = 6, a3 = 18, a4 = 3, a5 = 18;

若是稳定性排序,则排序结果一定是:

a1 = 3, a4 = 3, a2 = 6, a3 = 18, a5 = 18;

若是非稳定性排序,则排序结果可能会是:

a4 = 3, a1 = 3, a2 = 6, a3 = 18, a5 = 18;

这样a1 和a4 的相对位置改变。

1. 直接插入排序

设存在一个一维数组 array[0..n-1], 第 i 趟排序是将数组中下标为 i 的第 i + 1 个元素插入到一个已经按值有序排列的子序列的合适位置。

1.  插入排序开始时, 第一个元素看成有序序列,从下标为 i = 1 的第二个元素开始,每一趟排序都将下标为 i 的元素插入到之前的有序序列中,然后 i = i + 1 进行下一个元素的插入排序,由此可见插入排序需要 n - 1 趟排序

2. 每次寻找插入元素 array[i] 的位置时是从有序序列的最后一个元素 array[i-1] 开始查找,直到找到某一位置的元素 array[j] (j >= 0 && j <= i-1)满足 array[j] <= array[i], 那么下标为 

j + 1 的位置就应该是插入元素 array[i]的合适位置。从有序序列的最后一个元素开始查找,边查找边移动元素,而不是先找到插入位置再移动元素,这样提高了效率。

3. 将array数组中下标 [j + 1, i - 1]的所有元素依次后移一位,空出 array[j+1]的位置。

4. 将array[i] 元素赋值给 array[j+1], 至此完成插入排序的一趟排序。


看代码:


0 0
原创粉丝点击