平均情况:堆、归、快 最好情况:冒、直 最差情况:堆、归>快
一、插入排序
直接插入:从第二位开始 变为哨兵 前面超后移动 哨兵归位
希尔排序:dk/=2间插入排序
二、交换排序
冒泡排序:共(n+...+3+2+1)次 两两比较交换
快速排序:前后与“枢纽”比较+“枢纽”左右分治 注:需要借助递归栈,容量和递归深度一样O(log2n)
三、选择排序
简单选择:依次选max 找下标 放最后
堆排序:
1、排序:初始建立大顶堆->【交换第一个和最后一个数字->大顶堆调整-〉长度减减】<-循环
1)大顶堆调整:【父亲 = 大儿 ;大儿比他的大儿小;】<-重复重复。最后 最后的孩子变成最开始的“小父亲”。
2)初始建立大顶堆:从下往上依次调整非根节点(len/2~0),把最大的逼上去
注意:a[0]暂存根节点,a[i]左孩子a[2i]右孩子a[2i+1]
四、归并排序
递归分割+合并(合并的时候进行比较)
注意:合并的时候需要把原数组A复制到一个临时数组B,临时数组从a[low]和a[mid+1]开始两两向后做比较,小的数存入原数组A[k++]
五、基数排序
MSD LSD
辅助空间:r个队列(如基数r=10)
时间:O(d(n+r)) d位数 n个数 r队列数