SDUT 3491 数据结构实验之排序八:快速排序
数据结构实验之排序八:快速排序
Time Limit: 1000 ms Memory Limit: 65536 KiB
Problem Description
给定N(N≤10^5)个整数,要求用快速排序对数据进行升序排列,注意不得使用STL。
Input
连续输入多组数据,每组输入数据第一行给出正整数N(≤10^5),随后给出N个整数,数字间以空格分隔。
Output
输出排序后的结果,数字间以一个空格间隔,行末不得有多余空格。
Sample Input
8 49 38 65 97 76 13 27 49
Sample Output
13 27 38 49 49 65 76 972
提示:快排的时间复杂度为O(nlogn),最坏情况下为O(n
)
代码实现如下(g++):
#include<bits/stdc++.h> using namespace std; int a[100010]; void quicksort(int l,int r)//快排我就不多说了,比较基础的排序方式 { if(l>=r)return ; int i=l,j=r; int key=a[l]; while(i<j) { while(i<j&&a[j]>=key)j--; a[i]=a[j]; while(i<j&&a[i]<=key)i++; a[j]=a[i]; } a[i]=key; quicksort(l,i-1); quicksort(i+1,r); } int main() { int n,i; while(~scanf("%d",&n)) { for(i=0;i<n;i++) { scanf("%d",&a[i]); } quicksort(0,n-1); for(i=0;i<n;i++) { i<n-1? printf("%d ",a[i]):printf("%d\n",a[i]); } } return 0; } /*************************************************** Result: Accepted Take time: 148ms Take Memory: 596KB ****************************************************/