插入排序
插入排序基本思想:每一趟将一个待排序的元素,按其关键字值的大小插入到已经排过序的有序区中的适当位置,直到全部插入完成为止。不同插入排序算法的最根本的不同点是根据什么规则去找新元素的插入点,直接插入排序是依次寻找,希尔排序缩小增量再使用直接插入排序。
直接插入排序
- 基本思想
直接插入排序是一种最简单的排序方法,它就是依次将无序区中的每一个元素插入到一个有序区中去。 - 例子
{4,5,1,2,8,6,7,3,10,9}
取无序区间的第一个,从右向左扫描有序区间比较,方括号内可视为有序区间。
第一次:[4],5,1,2,8,6,7,3,10,9
第二次:[4,5],1,2,8,6,7,3,10,9
第三次:[1,4,5],2,8,6,7,3,10,9
第四次:[1,2,4,5],8,6,7,3,10,9
第五次:[1,2,4,5,8],6,7,3,10,9
第六次:[1,2,4,5,6,8],7,3,10,9
第七次:[1,2,4,5,6,7,8],3,10,9
第八次:[1,2,3,4,5,6,7,8],10,9
第九次:[1,2,3,4,5,6,7,8,10],9
第十次:[1,2,3,4,5,6,7,8,9,10] - 算法分析
直接插入排序算法的空间复杂度为O(1)。
最好的情况,要比较的无序序列原本就是顺序有序的,那么要比较的次数是n-1,移动了0次,时间复杂度O(n)。
最坏的情况,要比较的无序序列原本就是逆序有序的,那么要比较的次数是(n+2)(n-1)/2,移动的次数(n+4)(n-1)/2,时间复杂度O(n²)。
直接插入排序的平均复杂度为O(n²)。
直接插入排序是稳定的。
1、选择排序 基本思想:
选择排序是一种简单直观的排序算法,其基本原理如下:对于给定的一组记录,经过第一轮比较后得到最小的记录,然后将该记录的位置与第一个记录的位置交换;接着对不包括第一个记录以外的其他记录进行第二次比较,得到最小记录并与第二个位置记录交换;重复该过程,知道进行比较的记录只剩下一个为止。
2、复杂度分析:
从简单选择排序的过程来看,它最大的特点是交换移动数据次数相当少,这样就节约了相应的时间。分析它的时间复杂度发现,无论是最好最差情况,其比较次数都是一样多,第 i 趟排序需要进行 n-i 次关键字比较,此时需要比较次,对于交换次数而言,当最好的时候,交换0次,最差的时候,也就是初始降时,交换次数为 n-1 次,基于最终的时间排序与交换次数总和,因此,总的时间复杂度依然为。
尽管与冒泡排序同为,但简单选择排序的性能要优于冒泡排序。
3、排序过程如下:
以数组{49,38,65,97,76,13,27,49}为例,