0
点赞
收藏
分享

微信扫一扫

排序 - 快排 (quick sort)

文章目录

  • 1 . 前言
  • 2 . 快速原理
  • 3 . 代码实现
  • 4 . 时间复杂度
  • 5 . 总结


【全文大纲】 : 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 . 总结

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

举报

相关推荐

0 条评论