注意注释,正确理解快速排序!
#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==low
break;
}
high--;
}
while (low <high)
{
if (a[low]>pivotkey)
{
a[high] = a[low];//a[high]此时可被覆盖,赋值后,a[low]可被覆盖,或直到high==low
break;
}
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);
}
}
316

被折叠的 条评论
为什么被折叠?



