快速排序 代码语言:c

快速排序

时限:1000ms 内存限制:10000K  总时限:3000ms

描述:

给定一个数列,用快速排序算法把它排成升序。

输入:

第一行是一个整数n,表示要排序的数的个数;下面一行是用空格隔开的n个整数。

输出:

输出排序后的数列,每个数字占一行。

输入样例:

5
3 2 1 4 5

输出样例:

1
2
3
4

5

代码:

#include<stdio.h>
#include<stdlib.h>
 int *a;
int Partition(int low,int high)
{  
 int temp;  
 int pivotkey=a[low];    
while(low<high)    
{      
 while(low<high&&a[high]>=pivotkey)      
 {          
 --high;      
 }      
 temp=a[low];        
a[low]=a[high];        
a[high]=temp;        
while(low<high&&a[low]<=pivotkey)      
 {            low++;        }      
 temp=a[low];      
 a[low]=a[high];        
a[high]=temp;  
 }  
 return low;
}
void QSort(int low,int high)
{  
 int pivotloc;  
 if (low < high)    
{        pivotloc = Partition(low, high);  // 将L.r[low..high]一分为二        
QSort(low, pivotloc-1); // 对低子表递归排序,pivotloc是枢轴位置      
 QSort(pivotloc+1, high);          // 对高子表递归排序  
 }
}
int main()
{    int n,i;    
scanf("%d",&n);  
 a=(int *)malloc((n+1)*sizeof(int));  
 for(i=1;i<=n;i++)    
{        
scanf("%d",&a[i]);  
 }  
 QSort(1,n);  
 for(i=1;i<=n;i++)  
 {      
 printf("%d\n",a[i]);    
}
return 0;
}

  

posted @ 2011-05-24 18:41  itbird  Views(2733)  Comments(0Edit  收藏  举报