Problem Description
使用快速排序的随机化版本对输入的n个整数,按照从小到大的顺序排序。
Input Description
第一行输入一个整数n(0<n<=100000)。
第二行输入n个整数。
Output Description
输出排序后的n个整数,每个整数之间以一个空格分隔。注意:最后一个整数后面没有空格。
Sample Input
6
5 2 4 6 1 3
Sample Output
1 2 3 4 5 6
#include <iostream>
#include <vector>
using namespace std;
void quicksort(vector<int>& arr, int left, int right) {
if (left >= right) {
return;
}
int pivot = arr[left];
int i = left + 1, j = right;
while (i <= j) {
while (i <= j && arr[i] < pivot) {
++i;
}
while (i <= j && arr[j] >= pivot) {
--j;
}
if (i < j) {
swap(arr[i], arr[j]);
}
}
swap(arr[left], arr[j]);
quicksort(arr, left, j - 1);
quicksort(arr, j + 1, right);
}
int main() {
int n;
cin >> n;
vector<int> arr(n);
for (int i = 0; i < n; ++i) {
cin >> arr[i];
}
quicksort(arr, 0, n - 1);
for (int i = 0; i < n; ++i) {
cout << arr[i];
if (i < n - 1) {
cout << " ";
}
}
return 0;
}
#include<iostream>
#include<cstdio>
using namespace std;
int n,a[10000001];
void qsort(int i,int j)
{
int mid,l,r;
mid=a[(i+j)/2+1];
l=i;
r=j;
while(i<=j)
{
while(a[i]<mid)i++;
while(a[j]>mid)j--;
if(i<=j)
{
a[0]=a[i];
a[i]=a[j];
a[j]=a[0];
i++;
j--;
}
}
if(l<j)
qsort(l,j);
if(i<r)
qsort(i,r);
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
qsort(1,n);
for(int i=1;i<=n;i++)
{
printf("%d ",a[i]);
}
return 0;
}
(好似不是这样)。。。。。(_管他对不对,交就完了_)