八个排序算法

稳定性和不稳定性总结:
不稳定的有:
快速排序、希尔排序、堆排序、选择排序
稳定的有:
冒泡排序、插入排序、归并排序、基数排序

冒泡排序

它重复地走访 需要排序的元素列,一次比较两个相邻的元素,遇到顺序错的,就进行交换操作,直到没有相邻的元素需要交换

最好和最差情况都是O(n2),是稳定的

选择排序

第一次从待排序的数据元素中选择出最小的一个元素,存放在序列的其实位置,然后再从剩余的未排序的元素中继续寻找

属于不稳定排序,因为他可能会破坏两个相同大小的数字的先后顺序
最好和最坏情况的复杂度都是O(n2)

插入排序

将一个元素直接插入到一个已经排列好的序列中

时间复杂度 O(n2) 属于稳定的排序

快速排序

通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都要比另一部分的所有数据都要小,再按此方法对着两部分数据分别排序,整过过程通过递归的方式进行

属于不稳定排序 最好复杂度为O(nlogn),最坏为O(n2)

归并排序

归并排序是建立在归并操作上的一种有效,稳定的排序算法,该算法采用分治法,将已有的子序列和并,得到完全有序的序列。
属于稳定的排序,复杂度为nlog(n)

基数排序

属于分配式排序

稳定

希尔排序

是插入排序的一种
将数据先逻辑上分组,进行排序
然后缩小增量,排序
直至增量为1

不稳定 O(n^1.3-2)

堆排序

堆是具有以下性质的完全二叉树
每个节点的值都大于其左右孩子节点的值,大顶堆
或者相反,都小于,就是小顶堆

思路是把它写成树,然后从左到右,从下到上的开始调整顺序

复杂度是O(nlogn)
不稳定

你可能感兴趣的:(复习,快速排序)