C++之快速排序(3)---《那些奇怪的算法》
2017-09-21 22:00
337 查看
针对快排,我们设计思路是选择一个pivot门哨,将比pivot小的值放在其左边,比pivot大的值放在其右边,重点是需要找出pivot的位置,然后递归对其进行上面的操作即可,在这里我们需要合理选择pivot的位置,可以使得执行效率最高!
运行结果:
#include <iostream> #include <string> using namespace std; int partition(int arr[], int low, int high){ int pivot = arr[low]; while (low < high){ while (low < high&&arr[high] >= pivot) --high; arr[low] = arr[high]; while (low < high&&arr[low] <= pivot) ++low; arr[high] = arr[low]; } arr[low] = pivot; return low; } void QSort(int arr[], int low, int high){ if (low < high){ int partiloc = partition(arr, low, high); QSort(arr, low, partiloc-1); QSort(arr, partiloc + 1, high); } } void QuickSort(int arr[],int arr_len){ QSort(arr, 0, arr_len-1); } int main(){ int arr[] = { 10, 100, 30, 50, 40, 20, 1, 300 }; QuickSort(arr, 8); for (int i = 0; i < 8; i++){ cout << arr[i] << " "; } return 0; }
运行结果:
相关文章推荐
- C++之最长公共子串(最长子数组和)(22)---《那些奇怪的算法》
- C++之最长回文字符串的判断(8)---《那些奇怪的算法》
- C++之根据组合遍历顺序生成二叉树(25)---《那些奇怪的算法》
- C++之根据组合遍历顺序生成二叉树(25)---《那些奇怪的算法》
- C++实现二叉树的镜像操作(18)---《那些奇怪的算法》
- C++之实现大顶堆(1)---《那些奇怪的算法》
- C++之树的层序遍历和深度优先遍历(先序遍历)(14)---《那些奇怪的算法》
- C++之堆的实现(5)---《那些奇怪的算法》
- C++之整数转化为罗马数字(11)---《那些奇怪的算法》
- C++之数字容器装水问题(10)---《那些奇怪的算法》
- C++之最长公共子序列(21)---《那些奇怪的算法》
- C++之罗马数字转换为整型数字(12)---《那些奇怪的算法》
- C++之平衡二叉树的判定(25)---《那些奇怪的算法》
- C++之归并排序(7)---《那些奇怪的算法》
- C++之实现两个链表合并(迭代和递归版本)(19)---《那些奇怪的算法》
- C++实现两个有序链表合并(17)---《那些奇怪的算法》
- C++之字符串的zipzag排列(9)---《那些奇怪的算法》
- C++之求解二叉树中所有从根节点到叶节点的所有路径(23)---《那些奇怪的算法》
- C++之求取vector中三个元素和和给定元素最接近的值(15)---《那些奇怪的算法》
- C++之给定向量中4个元素的和等于给定值得向量和(16)---《那些奇怪的算法》