排序一:快速排序

快速排序是内部排序的一种,即数据保存在内存中,而非文件中。

基本思想是以一个基准值(通常选第一个数据),通过一次扫描和移动数据,让基准值右边所有的数据(无序)都比基准值大,左边的数据(无序)都比基准值小。然后再用同样的方法扫描和移动两边的数据,直到最后2个数据为基本单位,按大小排列,最终完成整个数据序列的排序。

以{3, 4, 2, 1, 6, 5, 9, 8, 7, 0}为例子。

第一次扫描:扫描范围(0,9),基准值为3,i=0,j=9,从右往左搜第一个比基准值大的数据,找到后,从左往右搜第一个比基准值小的数据,交换它们,然后继续做同样的搜索和交换直到i和j碰头(即要求j>i),表示第一次扫描结束,交换基准值单元和大于基准值的A[j]。然后以基准值单元为界限,递归处理基准值左、右两边的数据。

快速排序比冒泡排序难理解,但是效率确实高很多。

void hjd_quick_sort(int arraysort[], int nSt, int nEnd)
{
    if (nSt < nEnd)
    {
        int ni = nSt, nj = nEnd, nMid = nSt;
        int nSTD = arraysort[nSt]; //基准值
        while (ni < nj)
        {
            if (arraysort[nj] < nSTD)
            {
                if (arraysort[ni] > nSTD)
                {
                    int nTmp = arraysort[ni];
                    arraysort[ni] = arraysort[nj];
                    arraysort[nj] = nTmp;
                    ni++;
                    nj--;
                }
                else
                {
                    ni++;
                }
            }
            else
            {
                nj--;
            }
        }
        //when ni meets nj, stop this round of search and swap Array[nSt] and Array[nj]
        int nTmp = arraysort[nj];
        arraysort[nj] = arraysort[nSt];
        arraysort[nSt] = nTmp;
        nMid = nj;
        hjd_quick_sort(arraysort, nSt, nMid - 1);
        hjd_quick_sort(arraysort, nMid + 1, nEnd);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值