题目描述
将读入的 N 个数从小到大排序后输出。
输入格式
第一行为一个正整数 N。
第二行包含 N 个空格隔开的正整数 ai,为你需要进行排序的数。
输出格式
将给定的 N 个数从小到大输出,数之间空格隔开,行末换行且无空格。
输入输出样例
输入 #1
5
4 2 4 5 1
输出 #1
1 2 4 4 5
说明/提示
对于 20% 的数据,有 1≤N≤;
对于 100% 的数据,有 1≤N≤,1≤ai≤
。
快速排序(Quick Sort)
适用场景:
大数据集 :快速排序在处理大数据集时通常比简单的排序算法更快,因为它采用了分治策略,平均时间复杂度为 O(n log n)。
内存充足:快速排序是原地排序算法(in-place sort),但它需要额外的栈空间用于递归调用。在内存充足的情况下,这不是问题。
数据随机分布:当数据随机分布时,快速排序的性能最好。如果数据已经部分排序或完全排序,快速排序的性能可能会下降(最坏情况时间复杂度为 O(n^2)),但这种情况可以通过随机选择枢轴(pivot)或三数取中来缓解。
cpp
#include<iostream>
using namespace std;
int n;
const int N = 100010;
int a[N];
void quick_sort(int a[], int l, int r) //l:第一个数的下标,r:最后一个数的下标
{
if(l>=r) return;
int i = l-1, j = r+1; //i,j两个指针分别先指向越界的位置
int x = a[l+r >> 1];
while(i<j)
{
do i++; while(a[i]<x); //i先++,如果不-1,下标会从1开始
do j--; while(a[j]>x);
if(i<j) swap(a[i], a[j]);
}
quick_sort(a, l, j);
quick_sort(a, j+1, r);
}
int main()
{
cin>>n;
for(int i=0; i<n; i++)
{
cin>>a[i];
}
quick_sort(a, 0, n-1);
for(int i=0; i<n; i++)
{
cout<<a[i]<<" ";
}
return 0;
}