代码:

 1 public static void quickSort(int[] arr) {
2 if (arr == null || arr.length < 2) {
3 return;
4 }
5 quickSort(arr, 0, arr.length - 1);
6 }
7
8 public static void quickSort(int[] arr, int l, int r) {
9 if (l < r) {
10 swap(arr, l + (int) (Math.random() * (r - l + 1)), r);
11 int[] p = partition(arr, l, r);
12 quickSort(arr, l, p[0] - 1);
13 quickSort(arr, p[1] + 1, r);
14 }
15 }
16
17 public static int[] partition(int[] arr, int l, int r) {
18 int less = l - 1;
19 int more = r;
20 while (l < more) {
21 if (arr[l] < arr[r]) {
22 swap(arr, ++less, l++);
23 } else if (arr[l] > arr[r]) {
24 swap(arr, --more, l);
25 } else {
26 l++;
27 }
28 }
29 swap(arr, more, r);
30 return new int[] { less + 1, more };
31 }
32
33 public static void swap(int[] arr, int i, int j) {
34 int tmp = arr[i];
35 arr[i] = arr[j];
36 arr[j] = tmp;
37 }

理解:

什么是随机快速排序?

快速排序是在一个数组中,每次选定一个基准,然后把这个数组分为三部分(大于这个数的、等于这个数的、小于这个数的)

这三部分之中,等于标准数的这个部分,就是排好序的,它们不需要再动了。那么左右两边继续重复这个过程,在左边再次

选择一个标准数,右边也是一样,重复到最后,所有数的位置也就固定了!随机快速排序是在这个基础之上,每次选定的那

个数是随机产生的,普通快速排序可能会选择最右边的那个数或者最左边的数,这容易出现问题,比如 1234567 如果选定了

7这个数,那么从左往右走一遍,最后发现比7小的本身都在左边,那么这一遍排序其实是浪费了的,所以选定的那个数的位

置很重要!

partition这个方法的作用是返回每次快排之后那个数组的小于区的最右边界以及大于区的最左边界!是一个长度为2的数组!

递归方法:先对左侧递归完成左侧排序,再对右侧递归,完成右边排序,最终整体有序!

【Java】快速排序的更多相关文章

  1. Java 快速排序两种实现

    快速排序,只要学习过编程的人肯定都听说过这个名词,但是有时候写的时候还真蒙住了,网上搜罗了下以及查阅了"introduction to algorithm",暂时找到两种实现快排的 ...

  2. java快速排序1000万无序数组JVM-Xmx=256M 耗时2s

    自己动手写排序算法,快速排序是比较不好写的了~ import java.util.*; class Test{ public void quickSort(int[] arr,int low,int ...

  3. 面试 12:玩转 Java 快速排序

    终于轮到我们排序算法中的王牌登场了. 快速排序由于排序效率在同为 O(nlogn) 的几种排序方法中效率最高,因此经常被采用.再加上快速排序思想——分治法也确实非常实用,所以 在各大厂的面试习题中,快 ...

  4. java快速排序引起的StackOverflowError异常

    写在前面:这篇随笔主要记录一下递归调用引起的虚拟机栈溢出的情况以及通过参数配置了虚拟机栈大小来使递归调用可以顺利执行.并没有对涉及到的一些概念进行详细的解释(因为我自己目前对这些概念并不是特别清楚), ...

  5. Java 快速排序讲解

    快速排序由于排序效率在同为 O(nlogn) 的几种排序方法中效率最高,因此经常被采用.再加上快速排序思想——分治法也确实非常实用,所以 在各大厂的面试习题中,快排总是最耀眼的那个.要是你会的排序算法 ...

  6. Java快速排序 分别以数组0位作为基准 和最后一位作为基准的排序演示

    package util; public class Pub { public static void beforeSort(int[] arr){ System.out.println(" ...

  7. Java快速排序

    快速排序: public int Partition(int[] nums, int low, int high) { int pivot = nums[low]; while (low < h ...

  8. java快速排序详解

    快速排序 public class QuickSort { public static void main(String[] args) { int[] a = { 0, 3, 6, 8, 2, 4, ...

  9. Java快速排序算法

    快速排序算法思想: 快速排序(Quicksort)是对冒泡排序的一种改进. 快速排序由C. A. R. Hoare在1962年提出.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一 ...

  10. java 快速排序

    快速排序比插入排序快了两个数量级 package test.sort; public class Paixu { public static void main(String[] args) { // ...

随机推荐

  1. java.lang.System快速指南

    1.介绍 在本教程中,我们将快速了解java.lang.System类及其特性和核心功能. 2.IO 系统类是java.lang的一部分,它的一个主要特性是让我们能够访问标准的I/O流. 简单地说,它 ...

  2. 华为OD请己经入职的人出来谈谈你的真实感受?

    修改了一下回答的排版,之前只要更新就在最前面, 现在按照会见顺序重新整理了一下. 部门捞人 上海 深圳 西安 东莞 办公地 武汉南京现在也有 通道:点击通道2字 写在前面 总结一下我的体验其实挺好的, ...

  3. 实操开源版全栈测试工具RunnerGo安装(二)Linux安装

    手动安装(支持Linux.MacOS.Windows) Linux安装步骤 以debian系统为例,其他linux系统参考官方文档:https://docs.docker.com/engine/ins ...

  4. win32 - QueryDisplayConfig的使用

    QueryDisplayConfig函数检索关于所有显示设备的所有可能的显示路径,或视图,在当前设置的信息. C++样本: (开箱即用) 代码列出了所有显示器的名称和拓展模式 #include < ...

  5. Python输出日志信息

    在Python中要输出日志信息有2种方式: 1.调用内置的print()方法,该方式只能将信息输出到控制台 2.使用logging模块将日志信息输出到文件中(logging模块默认也是输出到控制台:标 ...

  6. Fasfdfs搭建

    目录 介绍 参考 tracker-server: storage-server: group: meta data: 部署 FastDfs服务架构图 本地部署服务 安装 libfastcommon 和 ...

  7. 【Azure 服务总线】使用Azure Service Bus 时,出现证书错误: 所使用的证书具有无法验证的信任链

    问题描述 在Azure中连接 Service Bus 服务发送消息时发生证书错误,抛出证书异常消息: 或 The X.509 certificate CN=servicebus.chinaclouda ...

  8. 【Azure Spring Cloud】使用azure-spring-boot-starter-storage来上传文件报错: java.net.UnknownHostException: xxxxxxxx.blob.core.windows.net: Name or service not known

    问题描述 使用 azure-spring-boot-starter-storage 来上传文件到 Storage Blob中,并把应用部署到Azure 中国区的Spring Cloud服务后,调用上传 ...

  9. Taurus.MVC WebMVC 入门开发教程6:路由配置与路由映射

    前言: 在本篇 Taurus.MVC WebMVC 入门开发教程的第六篇文章中, 我们将讨论如何配置路由并映射到控制器和操作方法. 路由是决定应用程序如何响应客户端请求的重要组成部分,因此在 Web ...

  10. Java 异常处理(1) :try-catch-finally的使用

    1 package com.bytezero.throwable; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 impor ...