交换排序之“快速排序”(C++实现)

本文介绍了快速排序的基本思想,它是冒泡排序的改进版,通过一趟排序将待排记录分隔成独立的两部分,之后分别对左右两部分继续进行排序。详细讲解了一趟划分的过程,并给出了C++实现的递归调用代码,以及测试和完整代码展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

快速排序(quick sort)是冒泡排序改进而来的,基本思想是在待排序的n个元素中,取第一个元素作为基准,将该元素放在适当的位置,将这个数据序列分为两部分,到这里称为一趟排序。此时基准数左边的数都比它小,基准数右边的数都比大。接下来便用同样的方法分别对左右两边的数据进行排序,直到序列中没有元素或只有一个元素。

快速排序每趟仅将一个元素归位。

接下来看一趟划分的代码,原理就是设置两个指示器i和j分别指向序列的第一个和最后一个元素。先是 j 从右往左扫描,当扫描到比基数小的元素就将该元素赋值到 R[i] 。然后便排到 i 从左往右扫,当扫描到比基数大的元素就将该元素赋值给 R[j] 。如此循环直到i和j相遇,便将基数赋值给两个指针同时指向的这个元素。此时便是一趟排序完成。

一趟划分

int partition(int R[], int s, int t)//一趟划分
{
    int i = s, j = t;
    int tmp = R[i];//以第一个数为基准
    while (i<j)//两端交替向中间扫描,直到i=j为止
    {
        while (j>i&&R[j]>=tmp)//从右向左扫描
        {
            j--;
        }
        R[i] = R[j];//右边扫描结束

        while (i<j&&R[i]<=tmp)
        {
            i++;
        }
        R[j] = R[i];//左边扫描结束
    }
    R[i] = tmp;
        //输出每趟划分后的序列
    for (int i = 0; i <= 6; i++)
    {
        cout << R[i]<<"  ";
    }
    cout << endl;

    return i;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值