/// E-mail:cangzhu@163.com//快速排序法//基本的思想:通過一趟排序將待排的記錄分割成獨立的兩部分,
//其中前一部分的 記錄的要害字均比另一部分記錄的要害字小,
//再分別對兩組記錄進行遞歸分割,達到排序的目的//平均時間復雜度為 O(log2(n))#include "iostream.h"
#include "stdlib.h"http://交換兩變量值
void swap(int &a,int &b)
{
int c;
c=a;a=b;b=c;
}//將數組分成兩部分,前一部分的值均比后一部分值小
//返回分界點
int Partition(int data[],int low,int high)
{
int pivokey;
pivokey=data[low];
while(low<high)
{
while(low<high&&data[high]>=pivokey)
high--;
swap(data[low],data[high]); while(low<high&&data[low]<=pivokey)
low++;
swap(data[low],data[high]);
}
return low;
}//進行的遞歸的調用,達到排序的目的
void QSort(int data[],int low,int high)
{
if(low<high)
{
int pivokey=Partition(data,low,high);
QSort(data,low,pivokey-1);
QSort(data,pivokey+1,high);
}
}void main()
{
int i;
int mydata[50];
for(i=0;i<50;i++)
{
//每行顯示 10 個數據
if(i%10==0)
cout<<endl;
mydata[i]=rand()%100;
cout<<mydata[i]<<" ";
} QSort(mydata,0,49); cout<<endl<<endl;
for(i=0;i<50;i++)
{
//每行顯示 10 個數據
if(i%10==0)
cout<<endl;
cout<<mydata[i]<<" ";
}
}