Sort algorithms
冒泡排序
每次将最大的放在最后,代码:
1 | void bubbleSort(vector<int>& arr) |
选择排序
整体比较,相对于冒泡排序,选择排序需要比较选择最小的放在前面,减少了交换次数。代码:
1 | void selection_sort(vector<int>& arr) |
插入排序
插入排序类似于玩扑克牌,拿到一张牌,就把它插入到大小合适的位置,并保证其前面的牌已经按顺序排列好。代码:
1 | void insertion_sort(vector<int>& arr) |
快速排序
来自于冒泡排序的思想,通过与基准比较,将小数排到一边,大数排到另外一遍。代码:
1 | int partion(vector<int>& arr, int low, int high) |
## 归并排序
基于分而治之的思想,先递归划分成子问题,然后合并结果。简单来说就是先两两合并有序序列,然后再四四合并。。。
1 | void merge(vector<int>& arr, int l, int m, int r) |
堆排序
借助堆来实现选择排序,升序就用大顶堆,降序就用小顶堆。将有序数列建成堆,从第一个非叶元素开始依次建堆;调整成堆,每次将堆顶元素和最后一个元素交换,并调整堆。
1 | void heapify(vector<int>& arr, int n, int root) |