排序算法基础篇(上) (适用于大脑短路迅速回想--“破釜沉舟”之人)
文前声明
不用代码块的目的是希望各位读者或者将来的我看完后能再一次手动打出代码 而不是Ctrl C+Ctrl V
共勉 -_-
冒泡排序(Bubble Sort)
重复地遍历过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来,遍历数列的工作是重复地进行比较和交换直到没有再需要交换的情况或者到数组末尾
复杂度:O(n²)
选择排序(Selection Sort)
先在未排序序列中找到最小(大)元素,存放到序列的起始位置,再从元素中继续寻找最小(大)元素放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
复杂度:O(n²)
插入排序(Insert Sort)
从数组的第二个元素开始不断地往前遍历,如果找到了比该元素小的值,则插到它前面去。
复杂度 O(n²)
优化前的快速排序(Quick Sort)
从数列中挑出一个元素,称为 “基准”,重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区操作。递归地把小于基准值元素的子数列和大于基准值元素的子数列排序。
复杂度:最坏 O(n²) 一般 O(nlogn)
二路归并排序(Merge Sort)
二路归并思想就是将n个元素的数组看成是n个有序的子序列,每个子序列长度为1,两两归并得到n>>1个长度为2的有序子序列,然后再归并,一直到得到一个长度为n的序列为止
最"稳定"的排序方法 复杂度O(nlogn)