快速排序
来源:互联网 发布:黑暗森林威慑 知乎 编辑:程序博客网 时间:2024/06/06 09:09
注意注释,正确理解快速排序!
#include<iostream> #include<string> #include<vector>#include<algorithm>#define MAX_NUM 20020001 using namespace std;void Qsort(int *a, int low, int high);int main(){int N;cin >> N;int a[100000];for (int i = 0; i < N; i++)cin >> a[i];Qsort(a, 0,N-1);cout << a[0];for (int i = 1; i < N; i++)cout << " " << a[i];system("pause");return 0;}int sort(int *a,int low,int high){int pivotkey;if ((a[high] <= a[low] && a[high] >= a[(low + high) / 2]) || (a[high] >= a[low] && a[high] <= a[(low + high) / 2])){int tmp = a[high];a[high] = a[low];a[low] = tmp;//把中值交换至a[low]}if ((a[(low + high) / 2] >= a[low] && a[high] >= a[(low + high) / 2]) || (a[high]<= a[(low + high) / 2] && a[low] <= a[(low + high) / 2])){int tmp = a[(low + high) / 2];a[(low + high) / 2] = a[low];a[low] = tmp;//把中值交换至a[low]}pivotkey = a[low];//枢轴,此时low位置可被覆盖while (low < high)//low==high时结束循环{while (low < high){if (a[high] <pivotkey){a[low] = a[high];//a[low]此时可被覆盖,赋值后,a[high]可被覆盖,或者直到high==lowbreak;}high--;}while (low <high){if (a[low]>pivotkey){a[high] = a[low];//a[high]此时可被覆盖,赋值后,a[low]可被覆盖,或直到high==lowbreak;}low++;}}a[low] = pivotkey;//low==high时的位置为枢轴的位置。return low;}void Qsort(int *a, int low, int high){if (low < high){int pivotkey = sort(a, low, high);Qsort(a, low, pivotkey-1);Qsort(a, pivotkey+1, high);}}
阅读全文
0 0
- 快速排序
- 快速排序
- 快速排序
- 快速排序!
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- git 基本操作
- bootstrap-table分页
- Mongodb监控
- kaldi-ctc src/ctcbin 底层命令学习
- Intel IDF 开发者峰会被彻底取消
- 快速排序
- jQuery框架
- Sublime text 2/3 中 Package Control 的安装与使用方法
- tesseract 3.02使用及语言库训练
- zabbix 基于JMX监控tomcat
- LVS 工作模式以及工作原理
- python 自带urllib.request 模块简单介绍(python3.5)
- DSL(domain specific language )
- 使用sklearn做特征工程