关于插入排序的例子网上有很多,这里只是为了加深理解,做个简单的记录,方便以后回顾。
一、代码图片(升序排序)
二、实现思路
1. 插入排序是将未排序的数据插入到已经排序的数据中。其实仔细发现其实插入排序是冒泡排序的改进版,冒泡排序是从头开始向后面比较,基本上每次都要从头比较到尾部,而插入排序从后向前比较,我们从第二个元素开始向前比较,当遇到一个大于他的数时,就将该数向后移动一位,然后继续向前比较知道遇到不大于他的数停止,然后从第三个元素开始重复上面的操作知道最后一个元素。这样明显的降低了比较的次数,是冒泡排序的进化版。效率任然为O(N^2) --->最坏的情况是完全倒序,此时比较次数就和冒泡排序一样。(插入排序的好处在于他无需从后向前比较到最前面的元素,只需要比较到第一个小于他的数就可以停止了,因为前面是有序的所以前面的数都肯定小于他)
2. 元素移动展示
3. 插入排序,一般也被称为直接插入排序。对于少量元素的排序,它是一个有效的算法。应用场景适合规模不大于1000。
三、复杂度分析
时间复杂度
在插入排序中,当待排序数组是有序时,是最优的情况,只需当前数跟前一个数比较一下就可以了,这时一共需要比较N- 1次,时间复杂度为O(N)。
最坏的情况是待排序数组是逆序的,此时需要比较次数最多,总次数记为:1+2+3+…+N-1,所以,插入排序最坏情况下的时间复杂度为O(N²)。
平均来说,A[1..j-1]中的一半元素小于A[j],一半元素大于A[j]。插入排序在平均情况运行时间与最坏情况运行时间一样,是输入规模的二次函数。
空间复杂度
插入排序的空间复杂度为常数阶 O(1)。
未完。。。