排序之一:快速排序

  • 介绍
    快速排序又称分割交换排序法,是目前公认最佳的排序法。它的原理和冒泡排序法一样都是用交换的方式,不过它会现在数据中找到一个虚拟的中间值,把小于中间值的数据放在左边,而大于中间值的数据放在右边,再以同样的方式分别处理左右两边的数据,直到完成为止。
  • 演示
    代码如下:
private static void quickSort(int arr[], int low, int high) {
    int l = low, h = high, povit = arr[low], tmp;
    while (l < h) {
        while (l < h && arr[h] >= povit) h--;
        if (l < h) {
            tmp = arr[h];
            arr[h] = arr[l];
            arr[l] = tmp;
            l++;
        }
        while (l < h && arr[l] <= povit) l++;
        if (l < h) {
            tmp = arr[h];
            arr[h] = arr[l];
            arr[l] = tmp;
            h--;
        }
    }
    if (l > low) quickSort(arr, low, l - 1);
    if (h < high) quickSort(arr, l + 1, high);
}

运行效果:


快速排序运行效果.png
  • 分析
  1. 在最快及平均情况下,时间复杂度为O(nlog底数为2 的n)。最坏情况就是每次挑中的中间值不是最大就是最小,起时间复杂度为O(n²);
  2. 不是稳定排序法;
  3. 在最差的情况下,空间复杂度为O(n),而最佳情况为O(log以2为底的n);

其他排序:插入排序选择排序冒泡排序希尔排序基数排序

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,354评论 0 33
  • 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    蚁前阅读 10,593评论 0 52
  • 概述:排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    每天刷两次牙阅读 9,089评论 0 15
  • 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 将一个记录插入到已排序好...
    依依玖玥阅读 5,031评论 0 2
  • 四年多,不长也不短。 我们共同创造了很多,❤️❤️,嗨皮先生,米四,小伶子和大奎子的爱情故事,夏天牵小手指,蒙眼不...
    苏怀度阅读 1,292评论 0 0

友情链接更多精彩内容