基数排序 |
假设一堆数字,最高位数为n,首先对个位进行排序,按顺序排好后,再按十位进行排序,依次最终对第n为进行排序,此时所有数字有序 |
数字按个位数字和固有顺序排列 |
插入排序 |
每次选取一个数字,插入到前面已经排好序的数字串中 |
前两个数有序 |
快速排序 |
选定的数,先从后往前找比他小的数,交换位置,再从前往后找比他大的数,交换位置,直到他两侧的数字以他为分界,分别大于或小于他(等于的情况应具体归类于左侧或右侧一侧中) |
数组第1个数作为选定的数,此时出现在整个数组中间 |
希尔排序 |
选定一个n,第1项和第n+1项排序,第2项和第n+2项排序,...一遍排序后,将n缩小1,重复这个操作,直到n=1。有的题目是从后往前逐步排序 |
间隔为n的框边缘元素依次有序(也可能无序,因为一个位置可能被交换两次) |
堆排序 |
构建一个二叉树,初始化的时候从最左非叶节点开始,每次把非叶节点的值和整个子树中,局部最大(先判断左右叶子那个大,选大的走,不断递归)的节点交换。之后逐步往上重复这个操作。全部操作完后,每次选择数组最末尾数字和堆顶元素,并把堆顶节点执行以下节点交换操作。参考博客《图解排序算法(三)之堆排序》
|
|
归并排序 |
初始是n个小集合,每次两两凑成一个大集合,logn次之后,全部形成一个有序集合。 |
一堆集合,每个集合中有2个已排序元素 |
选择排序 |
每次选择最大/最小的放到最开始 |
第一个数是正确的,其他不动 |
冒泡排序 |
相邻两个数比较+排序,从头向尾递归,每次能得到准确的最后一个数 |
最后一个数正确,前面的数部分出现移动 |