快速排序算法

快速排序算法在很多的数据结构与算法书中都有讲解,关于它不过多介绍了.

快速排序算法的时间复杂度最坏情况下是O(n^2)也就是每次哨兵几乎都不起作用的情况下,平均时间复杂度是O(nlgn).

 

快速排序算法
#include<stdio.h>
#include
<stdlib.h>
#include
<time.h>
#define MAX  100
/*
快速排序算法的两个主要步骤,分割(Partition和QuickSort)
*/
int Partition(int A[],int p,int q);
int QuickSort(int A[],int p,int q);
int test();
int main()
{
 test();
 
return 0;
}
/*
一个很简单的测试函数
*/
int test()
{
 
int a[MAX];
 
int i;
 srand((
int)time(0));
 
for(i = 0;i<MAX;i++)
 {
  
  a[i] 
= rand();
 }
 
for(i = 0;i<MAX;i++)
  printf(
"%d\t",a[i]);
 printf(
"\n");
 QuickSort(a,
0,MAX-1);
 
for(i = 0;i<MAX;i++)
  printf(
"%d\t",a[i]);
 printf(
"\n");

}
/*
Partition步骤中哨兵选取的是最后一个元素作为哨兵
*/
int Partition(int A[],int p,int q)
{
 
int i,j,x,t;
 x 
= A[q];
 i 
= p-1;
 
for (j = p;j<=q;j++)
  
if(A[j] < x)
  {
   i
++;
   t 
= A[j];
   A[j] 
= A[i];
   A[i] 
= t;
  }
 A[q] 
= A[i+1];
 A[i
+1= x;
 
return i+1;
}
/*
递归调用的QuickSort程序
*/
int QuickSort(int A[],int p,int r)
{
 
if(p<r)
 {
  
int q = Partition(A,p,r);
  QuickSort(A,p,q
-1);
  QuickSort(A,q
+1,r);
 }
}