7种常见排序算法
1. 冒泡排序
从第一个元素开始与右侧元素两两比较并交换,直到右侧成为有序部分。
2. 选择排序
有序部分在左侧,在剩余元素中找到最小的那个元素,并与剩余元素中第一个元素交换。
3. 插入排序
有序部分在左侧,将剩余元素中第一个元素不断向左交换,直到此元素处于有序部分恰当位置。
4. 希尔排序
取一个间隔值,距离为间隔值的元素为一组,将整个数组分为若干组。每组内进行插入排序。缩小间隔值并重复,直到间隔值为1,即所有元素在同一组。
5. 归并排序
分治。将数组分为两半,通过递归调用将两半分别排序,然后将有序的两半进行二路归并。
6. 快速排序
分治。随意地选取第一个元素作为切分元素。左右指针向中间扫描,当左侧扫描到大于等于切分元素的元素、右侧扫描到小于等于切分元素的元素,交换。当左右指针重合时,将重合位置元素与切分元素交换,这样切分元素就处于中间。递归调用,将左右部分分别排序。
7. 堆排序
二叉堆:父节点值大于等于两个字节点值的完全二叉树。
以第一个元素空置的数组表示时,位置为k节点的父节点位置为k/2,两个字节点位置分别为2k和2k+1。
插入元素:将新元素添加到末尾,上浮此元素到合适位置。
删除最大元素:删除顶端元素,将最后一个元素放到顶端,下沉此元素到合适位置。
从N/2位置处由右至左下沉来构造有序堆。取堆顶元素为已排序部分,将末尾元素放至堆顶并下沉形成新有序堆。