快速排序

#include<iostream.h>

   
    // 切分数据为左右两个部分,返回中间元素x的编号
    // 主要的过程就是:选择一个元素x作为分界点,将比x大的元素放到x右边,其余放到x左边。
int Partition (int* Array, int nLower, int nUpper)
    {
        int nLeft = nLower + 1;
        int Pivot = Array[nLower];
       
        int nRight = nUpper;
       
        int Swap;
        while (nLeft <= nRight)
        {
            while (nLeft <= nRight && Array[nLeft]<=Pivot)
                nLeft = nLeft + 1;
            while (nLeft <= nRight && Array[nRight]> Pivot)
                nRight = nRight - 1;

            if (nLeft < nRight)
            {
                Swap = Array[nLeft];
                Array[nLeft] = Array[nRight];
                Array[nRight] = Swap;
                nLeft = nLeft + 1;
                nRight = nRight - 1;
            }
        }
       
        Swap = Array[nLower];
        Array[nLower] = Array[nRight];
        Array[nRight] = Swap;
        return nRight;
    }

 void QuickSort(int* Array, int nLower, int nUpper)
    {
        // 测试是否排序完毕
        if (nLower < nUpper)
        {
            // 分解和分别进行排序
            int nSplit = Partition (Array, nLower, nUpper);//数据切分为两个部分
            QuickSort (Array, nLower, nSplit - 1);//左半部分递归排序
            QuickSort (Array, nSplit + 1, nUpper);//右半部分递归排序
        }
    }
void main()
{

 int i[]={2,4,5,3,1,9,10,11,6,8,7};
 int j=sizeof(i)/sizeof(int);
 QuickSort(i,0,j);
 for(int ii=0;ii<j;ii++)
 {
 cout<<i[ii];
 }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值