在学习了快速排序之后把这个思想记了下来,写一篇博客以备自己以后的复习。
#include <bits/stdc++.h>
#define LL long long
using namespace std;
const int N = 1e5 + 10;
//typedef long long LL;
int a[N];
int n;
void quicksort(int arry[], int l, int r)
{
int mid = arry[(l + r) / 2];//取中间数为基准数据
int i = l, j = r;
do {
while (arry[i] < mid)i++;//查找左半部分比中间数大的数,查找到后停止
while (arry[j] > mid)j--;//同理,找右半部分比中间数小的数
if (i <= j)
{
swap(arry[i], arry[j]);//两个数组交换
i++;
j--;
}
} while (i <= j);//等于时要走一遍,防止死循环。
if (l < j) quicksort(arry, l, j);//递归搜索左半部分
if (i < r)quicksort(arry, i, r);//递归搜索右半部分
}
int main()
{
cin >> n;
for (int i = 1; i <= n; ++i)
cin >> a[i];
quicksort(a, 1, n);
for (int i = 1; i < n; ++i)
cout << a[i] << ' ';
cout << a[n] << endl;
return 0;
}
|