快速排序 C語言描述
阿新 • • 發佈:2019-02-03
找女朋友
Time Limit: 15MS Memory Limit: 65536KBProblem Description
山東理工大學有很多學生,當然也有很多美女,機械實驗班的學委(外號:大王八)很想找個女朋友,但他想找個身高和自己相配的女生做女朋友,現有理工大N個美女的身高資料,但由於N的值較大,為了儘快找到合適的女友,大王八想請你幫他完成這N個美女的身高排序,按降序排列。
Input
輸入包括兩行,第一行是一個正整數N(N<=1000000),表示理工大共N個美女。第二行有N個正整數分別表示N位美女的身高,每個正整數的值不會超過10^9。 (輸入資料之間會用空格隔開)
Output
輸出只有一行,為這N個數的降序序列,數與數之間用空格隔開。
Example Input
5 1 3 2 5 4
Example Output
5 4 3 2 1
#include<stdio.h> #include<malloc.h> #define N 100005 int data[N]; void Change(int * a,int * b){ int t=*a; *a=*b; *b=t; } void QuickSort(int a[],int start,int end){ if(start<end){ int local=start; int front=start; int rear=end-1; while(front<rear){ while(a[rear]>=a[local]&&front<rear){ rear--; } Change(a+rear,a+local); local=rear; while(a[front]<a[local]&&front<rear){ front++; } Change(a+front,a+local); local=front; } QuickSort(a,start,local); QuickSort(a,local+1,end); } } int main(){ int n; scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%d",data+i); } QuickSort(data,0,n); for(int j=n-1;j>=0;j--){ printf("%d ",data[j]); } return 0; }
之前一直沒有想通一件事,導致快速排序一直存在越界問題,沒有考慮在傳值之前就有可能是start<end的情況,
快速排序的主要思想是以一個基準將整個序列劃分為大小兩部分,在分別對這兩部分實行快速排序,運用了遞迴的思想。