【吭哧吭哧算法】快速排序
2017-07-21 17:14
381 查看
void FastSortHelper(vector<int>&a, int s, int t){if (t <= s) return;int k = a[s];int i = s; //start searching positionint j = t; //end searching positionwhile (i < j){int x;for (x = j; x >= s; x--){if (a[x] < k){j = x;break;}}for (x = i; x <= j; x++){if (a[x] > k){i = x;break;}if (x >= j){i = j;break;}}swapab(a[i], a[j]);}swapab(a[s], a[j]);FastSortHelper(a, j + 1, t);FastSortHelper(a, s, j - 1);}void FastSort(vector<int> &a){if (a.size() <= 1) return;FastSortHelper(a, 0, a.size() - 1);桶排序在有限的数据范围内复杂度是 n冒泡排序是n方快速排序最差情况的复杂度和冒泡一样是n方,但是平均算法复杂度是nlogn核心思想,快速排序不再像冒泡一样一遍又一遍的遍历,为每个元素寻找最后的位置。快排会寻找一个基准数,比基准数小的放左边,比基准数大的放右边。参考啊哈算法,对于初始序列“6 1 2 7 9 3 4 5 10 8”,6是基准数。小A从左往右找第一个大于6的数,小B从右往左找第一个小于6的数。然后AB交换所在位置的数字。每次B先找, A后找,直到AB碰面的位置。基准数的位置与碰面位置上的数交换。之后对于基准数两侧的数重复做改操作。递归!
相关文章推荐
- 【坐在马桶上看算法】算法3:最常用的排序——快速排序
- 数据结构和算法-011 数组排序 快速排序
- 算法学习之旅,中级篇(4)-–快速排序
- 算法之快速排序
- 算法笔记_015:快速排序(Java)
- 排序算法之快速排序和归并排序
- Algorithm--让人困惑的快速排序(划分算法) 续
- 白话算法之快速排序
- 『算法设计_伪代码』快速排序
- java 算法之快速排序实现代码
- 算法设计之快速排序的随机化版本 (C++实现)
- 算法起步之快速排序
- 一步一步写算法(之快速排序)
- 算法之分治思想和快速排序
- 数据结构与算法——快速排序
- 算法(第四版)学习笔记之java实现快速排序
- 算法笔记——【分治法】快速排序
- 【算法导论】快速排序实现
- 算法——排序之快速排序
- C语言实现数组快速排序(含对算法的详细解释)