快速排序

基本思想

1.从数列中取一个数做哨兵(默认第一个数)
2.从左到右找到一个比哨兵大的数放到右边,再从右到左找到一个比哨兵小的数放到左边
3.以哨兵为分界线,进行分组
4.每个分组接着1.2.3循环,直到每个分组只有一个数

排序过程

在这里插入图片描述

C语言实例

//第一个参数是数组,第二个参数的数组左指针,第三个参数是数组的右指针
int sort(int *data, int left, int right) { 
    if (left >= right) return 0;		//直到分组只有一个数,就是排序完成
    
    int i = left;
    int j = right;
    int key = data[left];			   //以数组左指针的数为哨兵

    while (i < j) { 				   //只要左指针还在右指针的左边,继续排序
        while (i < j && key < data[j]) { 	//从右到左找到比哨兵小的数
            j --;
        }
        data[i] = data[j];					//把数放到左指针的位置

        while (i < j && key >= data[i]) {	//从左到右找到比哨兵大的数
            i ++;
        }
        data[j] = data[i];					//把数放到右指针的位置
    }

    data[i] = key;							//当i==j,排序完成,把哨兵放到当前位置的位置

    //
    sort(data, left, i-1);					//以哨兵为分界线,把左边的数组继续排序
    sort(data, i+1, right);					//以哨兵为分界线,把右边的数组继续排序

}

int quick_sort(int *data, int length) {
    sort(data, 0, length-1);
}

总结

快速排序就是每次排序都从数列中取出一个数做基准值,把左边比基准值大的放到右边,把右边比基准值小的放到左边,然后以基准值为分界线进行分组,直到每个分组只有一个数

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值