数据结构——快速排序

//快速排序算法
#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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

minyuanxiani

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值