排序 - 快排 (quick sort)


【全文大纲】 : https://blog.csdn.net/Engineer_LU/article/details/135149485


1 . 前言

数据整理过程中经常需要把数据排序,这篇文章主要详解快速排序

2 . 快速原理

  1. 把数据段最后一个数据作为参考数据
  2. 遍历数据段,把小于参考数据的放左边,大于参考数据段的放右边
  3. 经过步骤2后开始把参考数据左边与参考数据右边的数据分别进行递归重复步骤1和步骤2,直到各局部数据段需处理长度剩下一个说明排序完成

3 . 代码实现

void swap(int *src, int *dst) {
    int temp;
    temp = *src;
    *src = *dst;
    *dst = temp;
}

int partition(int arr[], int low, int high) {
    int i,j;
    int ref;
    ref =arr[high];
    i = low - 1;
    for (j = low; j < high; j++){
        if ( arr[j] ≤ ref ) {
            swap(&arr[++i], &arr[j]);
        }
    }
    swap(&arr[i + 1], &arr[high]);
    return i+1;
}

void quick_sort(int arr[], int low, int high){
    unsigned int index;
    if (low < high) {
        index = partition(arr, low, high);
        quick_sort(arr, low, index-1);
        quick_sort(arr, index+1, high);
    }
}

4 . 时间复杂度

O ( n ∗ l o g n ) O(n*logn) O(nlogn)

5 . 总结

快速排序适合用在时间敏感的场景上,这个算法由于用到了递归,所以需要借助过多的栈内存来完成,对系统的消耗多数体现在栈的消耗,若是追求快速,对时间复杂度要求高,这个算法是推荐的,谢谢观看。

技术交流群 : 745662457
群内专注 - 问题答疑,技术研究

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

极客 - L U

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

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

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

打赏作者

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

抵扣说明:

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

余额充值