数据结构——快速排序

来源:互联网 发布:百合蕾丝炫浪网络社区 编辑:程序博客网 时间:2024/05/18 17:59
//快速排序算法#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;}