数据结构——快速排序

 

//快速排序算法
#include <iostream>
#include
<cstdlib>
#include
<ctime>
using namespace std;

//快速排序
int Partition(int num[],int i,int j) //调用Partition(num,low,high)时,对num[low...high]做划分,并返回基准记录的位置
{
int pivot=num[i]; //用区间的第1个记录作为基准

while(i<j) //从区间两端交替向中间扫描,直至i=j为止
{
while(i<j && num[j]>=pivot) //pivot相当于在位置i上
j--; //从右向左扫描,查找第1个关键字小于pivot的记录num[j]

if(i<j) //表示找到的num[j]的关键字<pivot
num[i++]=num[j]; //相当于交换num[i]和num[j],交换后i指针加1

while(i<j && num[i]<=pivot) //pivot相当于在位置j上
i++; //从左向右扫描,查找第1个关键字大于pivot的记录num[i]

if(i<j) //表示找到了num[i],使num[i]>pivot
num[j--]=num[i]; //相当于交换num[i]和num[j],交换后j指针减1
}//end while

num[i]
=pivot; //基准记录已被最后定位
return i;
}

void Quicksort(int num[],int low,int high)
{
int pivotpos; //划分后的基准记录的位置
if(low<high) //仅当区间长度大于1时才须排序
{
pivotpos
=Partition(num,low,high); //对num[low..high]做划分

Quicksort(num,low,pivotpos
-1); //对左区间递归排序
//for(int i=low;i<=pivotpos-1;i++) //追踪左区间的排序情况
//cout<<num[i]<<" ";
//cout<<endl;

Quicksort(num,pivotpos
+1,high); //对右区间递归排序
//for(i=pivotpos+1;i<=high;i++) //追踪右区间的排序情况
//cout<<num[i]<<" ";
//cout<<endl;

}
}

int main()
{
srand((unsigned)time(
0)); //随机生成数据算法
int num[100];
for(int i=0;i<100;++i)
num[i]
= rand()%1000;

cout
<< "随机生成的原始数据 :";
for(i=0;i<100;++i)
{
if(0 == i%10)
cout
<<endl;
cout
<<num[i]<<" ";
}

Quicksort(num,
0,99);

cout
<< endl << endl << "排序后的数据:";
for(i=0;i<100;++i)
{
if (0 == i%10)
cout
<<endl;
cout
<<num[i]<<" ";
}
return 0;
}

 

posted @ 2010-07-15 01:09  忧国忧铭  Views(1596)  Comments(0)    收藏  举报