这题用冒泡排序和sort都会超时,这里用快速排序模板
模板如下
const int maxn = 1e5 + 10;
int q[maxn];
void quick_sort(int q[],int l,int r)
{
if (l >= r) return; //递归边界
int i = l - 1, j = r + 1, x = q[l + r >> 1]; //这里的初值分别设为l-1,r+1是因为
//while中是do,while结构。先使i+1,j-1指向数组第一个和最后一个位置,再开始判断。
while (i < j)
{
do i++; while (q[i] < x);
do j--; while (q[j] > x);
if (i < j) swap(q[i], q[j]); //交换
}
quick_sort(q, l, j), quick_sort(q, j + 1, r); //递归左右子序列
}
AC代码如下
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = 1e5 + 10;
int q[maxn];
void quick_sort(int q[], int l, int r)
{
if (l >= r) return;
int i = l - 1, j = r + 1, x = q[l + r >> 1];
while (i < j)
{
do i++; while (q[i] < x);
do j--; while (q[j] > x);
if (i < j) swap(q[i], q[j]);
}
quick_sort(q, l, j), quick_sort(q, j + 1, r);
}
int main()
{
int n;
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> q[i];
}
quick_sort(q, 1, n);
for (int i = 1; i <= n; i++)
{
cout << q[i] << " ";
}
cout << endl;
return 0;
}