排序方法之三:插入排序

Posted 大师兄编程

tags:

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


排序方法之三:插入排序
排序方法之三:插入排序

THERE

排序方法之插入排序

把n个待排序的元素看成为一个有序表和一个无序表。开始时有序表中只包含1个元素,无序表中包含有n-1个元素,每次将无序表中的元素,插入到前面已经排好序的有序序列中去,直到排序完成。

1

算法过程->直接插入排序

原始序列:{ 5 、2 、6 、0 、9  } 设5为有序,其中i为1


第一趟排序:第i个元素2比5小,则插入到5前面,然后i自增

 得到结果{ 2  、5  、6  、0  、9 }


第二趟排序:第i个元素6比5大,则插入到5后面,然后i自增

得到结果:{  25  、 、0 、 9 }


第三趟排序:第i个元素0比2,5,6小,则插入到2前面,然后i自增

得到结果:{ 0 25  、6 、 9 }


第四趟排序:第i个元素9比6大,则插入到6后面,然后i自增

得到结果:{ 0 2569 }


最终的排序结果为:{ 02 5  、6  、9 }


2

流程图展示->直接插入排序

排序方法之三:插入排序
排序方法之三:插入排序

3

代码实现->直接插入排序

JAVA实现代码

排序方法之三:插入排序

4

算法分析->直接插入排序

1、时间复杂度

1.1、在最好情况下,严格递增的数组,比较次数C和移动次数M为C=n-1M = 0时间复杂度为O(n)


1.2、在最坏情况下,严格递减的数组,比较次数C和移动次数M为:C = n(n-1)/2M = n(n-1)/2时间复杂度为O(n2)


1.3、综上,时间复杂度为:O(n2) 。


2、优缺点

2.1、优点:稳定,相对于冒泡排序与选择排序更快。


2.2、缺点:比较次数不一定,比较次数越少,插入点后的数据移动越多,特别是当数据总量大的时候;


5

算法优化->折半插入排序

原理:折半插入算法是对直接插入排序算法的改进,排序原理同直接插入算法。


区别:在插入到已排序的数据时采用来折半查找(二分查找),取已经排好序的数组的中间元素,与插入的数据进行比较,如果比插入的数据大,那么插入的数据肯定属于前半部分,否则属于后半部分,依次不断缩小范围,确定要插入的位置。


6

算法过程->折半插入排序

原始序列:{ } 设5为有序,其中i为1


第一趟排序:low为0,high为0,则中间值下标为0((low+high)/2,下文都是这样计算)即5大于2,则插入到5前面,然后i自增。

 得到结果{ 2  、5  、6  、0   、9 }


第二趟排序:low为0,high为1,则中间值下标为0,即2小于6,然后low等于中间值的下标加1,继续找中间值为5小于6,则插入到5后面,然后i自增。

得到结果:{  25  、6 、0 、 9 }


第三趟排序:low为0,high为2,则中间值下标为1,即0小于5,然后high等于中间值的下标减1,继续找中间值为2大于0,则插入到2前面,然后i自增。

得到结果:{ 025  、6 、 9 }


第四趟排序:low为0,high为3,则中间值下标为1,即2小于9,然后low等于中间值的下标加上1,继续找中间值为5小于9,然后low等于中间值的下标加上1,继续找中间值为6小于9,则插入到6后面,然后i自增。

得到结果:{ 0 2569 }


最终的排序结果为:{ 02 5  、6  、9 }


7

流程图展示->折半插入排序

排序方法之三:插入排序
排序方法之三:插入排序

8

代码实现->折半插入排序

JAVA实现代码

排序方法之三:插入排序

9

算法分析->折半插入排序

1、时间复杂度

折半插入排序减少了比较元素的次数,约为O(nlogn),比较的次数取决于表的元素个数n。因此,折半插入排序的时间复杂度仍然为O(n²),但它的效果还是比直接插入排序要好。


2、空间复杂度

排序只需要一个位置来暂存元素,因此空间复杂度为O(1)


3、优缺点

3.1、优点 : 稳定,相对于直接插入排序元素减少了比较次数


3.2、缺点 : 相对于直接插入排序元素的移动次数不变;


插入排序是一个稳定的排序算法哦

插入排序包括:

直接插入排序、折半插入排序

希尔排序、链表插入排序

本文只是介绍了直接插入排序和折半插入排序


排序方法之三:插入排序
排序方法之三:插入排序
排序方法之三:插入排序
排序方法之三:插入排序
排序方法之三:插入排序
排序方法之三:插入排序
排序方法之三:插入排序


喜欢本篇内容请给我们点个在看

以上是关于排序方法之三:插入排序的主要内容,如果未能解决你的问题,请参考以下文章

排序方法——插入排序

内排序方法的比较

排序(选择插入希尔)

插入排序和快速排序

希尔排序过程始末

排序算法之插入排序