java实现快速排序图解_快速排序图文详解

java实现快速排序图解_快速排序图文详解快速排序快速排序法介绍图解代码理解快速排序法介绍快速排序(QuickSort)是对冒泡排序的一种改进,基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。图解代码理解publicclassQuickSort{//从小到大排序publicvoidquickSort(intleft,intright,

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

快速排序法介绍

  • 快速排序(QuickSort)是对冒泡排序的一种改进,基本思想是:通过一趟排序将 要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

图解

在这里插入图片描述

代码理解

public class QuickSort { 
   

    //从小到大排序
    public void quickSort(int left, int right, int[] nums){ 
   
        if(left<right){ 
   
            //将小于nums[left]的值放左边,大于nums[left]的值放右边
            int index = partition(left, right, nums);
            //对左边部分进行快速排序
            quickSort(left, index, nums);
            //对右边部分进行快速排序
            quickSort(index+1, right, nums);
        }
    }

    private int partition(int left, int right, int[] nums) { 
   
        /** * 这一部分的理解,我们可以假设此时数组排序为【2,1,3,4,5】 * 那么while (left<right&&nums[right]>base) * 会循环到right=1 * 之后数组变化如下 * nums[left]=nums[right] * 【1,1,3,4,5】 * while (left<right&&nums[left]<base)循环到left=1 * nums[right]=nums[left]相当于什么都没做 * 此时left等于right,跳出循环 * 整个过程可以简化为 * base = nums[left] * nums[left]=nums[right] * nums[right]=base */
        int base = nums[left];
        while (left<right){ 
   
            while (left<right&&nums[right]>=base){ 
   
                right--;
            }
            nums[left] = nums[right];
            while (left<right&&nums[left]<=base){ 
   
                left++;
            }
            nums[right] = nums[left];
        }
        nums[right] = base;

        return left;
    }

    public static void main(String[] args) { 
   
        int[] nums = { 
   2,3,1,5,4};
        QuickSort quickSort = new QuickSort();
        quickSort.quickSort(0,nums.length-1, nums);
        for(int num:nums){ 
   
            System.out.println(num);
        }
    }
}

快速排序算法性能分析

  • 快速排序的时间性能取决于快速排序递归的深度
  • 在最优的情况下,Partition每次都划分得很均匀,如果排序n个数值,那么递归树的深度就为.log2n.+1(.x.表示不大于x的最大整数),即仅需递归log2n次,其时间复杂度为O(nlogn)
  • 在最坏的情况下,待排序的序列为正序或者逆序,每次划分只得到一个比上一次划分少一个数值的子序列,此时需要执行n-1次递归调用且第i次划分需要经过n-i次比较才能得到第i个数值,其时间复杂度为O(n^2)

算法图

  • 口诀:堆归选基与初始序列无关 快选希堆排序不稳定

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/179508.html原文链接:https://javaforall.net

(0)
上一篇 2022年10月21日 下午12:46
下一篇 2022年10月21日 下午12:46


相关推荐

  • Linux 安装 Anaconda

    Linux 安装 Anaconda一 Anaconda 是什么 如果把 Python 类比 Linux 那么 Anaconda 就是 centos ubuntu 之类的 Anaconda 是一个可用于科学计算的 Python 发行版 支持 Linux Mac Windows 系统 内置了常用的科学计算包 它解决了官方 Python 的两大痛点 第一 提供了包管理功能 Windows 平台安装第三方包经常失败的场景得以解决第二 提供环境管理的功能 功能类似 Virtualenv 解决了多版本 Python 并存 切换的问题 二 背景 由

    2026年3月17日
    2
  • 三极管是如何导通的?「建议收藏」

    三极管是如何导通的?「建议收藏」作者:被吊打的学渣链接:https://www.zhihu.com/question/19998995/answer/311658942来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转

    2022年8月3日
    11
  • java数组去重方法是,java数组去重的两种方法

    java数组去重方法是,java数组去重的两种方法我们对于数组元素的使用,有时候在创建数组的初期,并没有考虑过元素的重复问题。当我们想要不重复元素的数组时,就要再进行一步去重的工作。数组的去重有两种方法可以实现,一个是循环比较,另一个是hashSet的集合方法。下面我们就这两种Java数组去重的方法带来详解。1、循环比较循环对比每个元素的值是否一致,这个就不过多去介绍,主要是第2种方法2、利用hashSet去重hashSet是一个没有重复元素的集…

    2022年6月22日
    77
  • 简单工厂模式

    简单工厂模式

    2021年11月13日
    47
  • 上海it外包公司排名_it外包公司排行榜怎么来的?

    上海it外包公司排名_it外包公司排行榜怎么来的?在我们平时上网的时候,总是看到在一些中介网站上会有一些IT外包公司排行榜,这些排行与其它行业的排行榜一样,指导着我们的选择,为我们的外包工作指出了一条相对明晰的道路。那到底这些网站上的排行准不准确呢?下面我们就为大家解析一下。1.名气和口碑。也许我们对外包行业不是很懂,但是在看其它行业如房地产,家电等与大众息息相关的产业时,就会发现但凡上榜的都是很有名气的,且口碑也很好。这就表明了排行还是比较…

    2022年6月14日
    48
  • 国内开发者接入Nano Banana Pro API教程 0.09/张不仅便宜稳定性强的可怕

    国内开发者接入Nano Banana Pro API教程 0.09/张不仅便宜稳定性强的可怕

    2026年3月13日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号