1. 程式人生 > >快速排序 C語言描述

快速排序 C語言描述

找女朋友

Time Limit: 15MS Memory Limit: 65536KB

Problem 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的情況,

快速排序的主要思想是以一個基準將整個序列劃分為大小兩部分,在分別對這兩部分實行快速排序,運用了遞迴的思想。