快速排序

来源:互联网 发布:黑暗森林威慑 知乎 编辑:程序博客网 时间: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);}}



原创粉丝点击