划分算法-快速排序(课本题目)

课本上发现的例题:
题目表述
看后面的算法示例,了解到划分算法:

划分:快速排序的一个根本机制
划分数据:将数据分为2组,使所有关键字>特征值的数据在一起,关键字<特定值的数据在一起(每组不一定按顺序排列)
划分的过程不一定把数组分成大小相同的两半

划分算法:

先找到标准值(按题目说选第一个),记录为standard
由两个指针开始工作(又是类双指针…),两个指针low和high分别指向数组的两头,向中间移动
当low的数据小于标准值standard时,继续向中间移动;同理,high的数据>standard时,向中间移动,直到出现位置错误的数据,low和high指向的数据交换
在low=high时,值指向数据上的中间位置,对其赋值为标准值

代码
void swap(int a[],int m,int n)
{
    int t=a[m];
    a[m]=a[n];
    a[n]=t;
}
void part(int a[],int size)
{
    int standard=a[0];
    int low=1;
    int high=size;
    while(low<high)
    {
        while(low<high&&a[high]>=standard) high--;
        swap(a,low,high);
        while(low<high&&a[low]<=standard) low++;
        swap(a,low,high);
    }
    a[low]=high;
}

可以看出,时间复杂度O(n)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值