【快速排序】

1.快速排序

快速排序的定义就不赘述了,其主要代码框架如下:

void sort(int[] nums, int lo, int hi) {
    if (lo >= hi) {
        return;
    }
    // 对 nums[lo..hi] 进行切分
    // 使得 nums[lo..p-1] <= nums[p] < nums[p+1..hi]
    int p = partition(nums, lo, hi);
    // 去左右子数组进行切分
    sort(nums, lo, p - 1);
    sort(nums, p + 1, hi);
}

其主要思想就是先选定基准,使基准左边的元素全部小于它,右边的元素全部大于它(由小到大排序,反之亦然),类似于二叉树的先序遍历
参考链接:快速排序

2.使用python实现

def quickSort(arr):
    if len(arr) <= 1:
        return arr
    pivot = arr[len(arr) // 2] #选定中间元素为基准
    left = [x for x in arr if x < pivot]
    middle = [x for x in arr if x == pivot]
    right = [x for x in arr if x > pivot]
    return quickSort(left) + middle + quickSort(right)

2.使用C/C++实现

// 用第一个元素将待排序序列化分为左右部分
int partition(int* arr, int low, int high){
    int pivot = arr[low]; // 首元素作为基准
    while(low < high){
        while(low < high && arr[high] >= pivot) high--;
        arr[low] = arr[high]; // 比基准小的元素移到左边
        while(low < high && arr[low] <= pivot) low++;
        arr[high] = arr[low]; // 比基准大的元素移到右边
    }
    arr[low] = pivot; // 基准元素放到最终位置
    return low; // 返回基准元素索引
}

// 快速排序
void quickSort(int* arr, int low, int high){
    if(low < high){
        int pivot_pos = partition(arr, low, high); // 划分
        quickSort(arr, low, pivot_pos-1); // 划分左半部分
        quickSort(arr, pivot_pos+1, high); // 划分右半部分
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

泷叶er

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值