常见的排序有:快速排序、二分法、二路归并、冒泡排序等等。
二分法
原理:在使用二分查找时,一般会要求数据的排序是有序的。然后根据找到中间节点判断与目标数据的大小,如果目标数据比中间节点小,则目标节点的范围缩小到,起始点到中间节点-1,反之范围为中间节点+1到末尾点。如果相等,则返回该点,否则继续二分查找。
时间复杂度:O(log2n)——适合数据量大的
二路归并
原理:将原始序列划分为两个子序列,然后对每个子序列分别排序,最后再合并每个子序列。分而治之:借鉴该博主的图:
时间复杂度:O(nlogn)
快速排序
原理:找一个基数,然后从两端扫描把比基数大的放在基数右边,小的放在左边。先从右往左,找小的,找到后,再从左往右找大的以此类推。
时间复杂度:O(nlogn)
选择排序
原理:从左到右找一个最小的元素和第一个元素交换。紧接着从剩下的序列中继续从左到右找最小的元素和第一个交换。
时间复杂度:O(n^2)
直接插入排序
原理:顾名思义就是将要排序的数字直接插入到原来排好的序列中去。
时间复杂度:O(n^2)
不稳定排序算法
口诀:快选堆希——(快速排序、选择排序、堆排序、希尔排序)
稳定的排序算法:简单的理解就是,能保证排序前2个相等的数所在序列的前后相对位置顺序和排序后它们两个的前后位置顺序相同。如果A1 = A2,A1原来在位置前面,排序后A1还是保持在A2位置前。
不稳定的排序算法:排序前后在序列中的相对位置发生变化。