多种排序方法~插入排序法

一、多种排序的方法

常见的排序方法有冒泡法、沉底法、选择排序法。今天看到了另一种插入排序法,做个记录,方便今后总结学习。

二、分析

序数组如下:

把数组的首元素5作为有序区,此时有序区只有这一个元素:

第一轮

让元素8和有序区的元素依次比较。

8>5,所以元素8和元素5无需交换。

此时有序区的元素增加到两个:

第二轮

让元素6和有序区的元素依次比较。

6<8,所以把元素6和元素8进行交换:

6>5,所以把元素6和元素5无需交换。

此时有序区的元素增加到三个:

第三轮

让元素3和有序区的元素依次比较。

3<8,所以把元素3和元素8进行交换:

3<6,所以把元素3和元素6进行交换:

3<5,所以把元素3和元素5进行交换:

此时有序区的元素增加到四个:

以此类推,插入排序一共会进行(数组长度-1)轮,每一轮的结果如下:

优化方案:当我们把一个新的元素插入到有序区的时候,并不需要老老实实进行元素的两两交换。

什么意思呢?让我们以第三轮举例:

在第三轮操作中,我们需要让元素3逐个与有序区的元素进行比较和交换,与8交换、与6交换、与5交换,最终交换到有序区的第一个位置。

但是我们并不需要真的进行完整交换,只需把元素3暂存起来,再把有序区的元素从左向右逐一复制。

第一步,暂存元素3:

第二步,和前一个元素比较,由于3<8,复制元素8到它下一个位置:

第三步,和前一个元素比较,由于3<6,复制元素6到它下一个位置:

第四步,和前一个元素比较,由于3<5,复制元素5到它下一个位置:

第五步,也是最后一步,把暂存的元素3赋值到数组的首位:

显然,这样的优化方法减少了许多无谓的交换。

三、代码实现

猜你喜欢

转载自blog.csdn.net/qq_27747359/article/details/101558744