排序算法传送:

排序算法——java实现冒泡排序
排序算法——java实现选择排序
排序算法——java实现直接插入排序
排序算法——java实现二分法排序
排序算法——java实现希尔排序
排序算法——java实现快速排序

快速排序

1、算法思想
快速排序是由冒泡排序改进而得到的,是一种分区交换排序方法。思想如下:
一趟快速排序采用从两头向中间扫描的方法,同时交换与基准记录逆序的记录。

(1)在待排序的N个记录中任取一个元素(通常取第一个记录)作为基准,称为基准记录;
(2)定义两个索引 left 和 right 分别表示“首索引” 和 “尾索引”,key 表示“基准值”;
(3)首先,尾索引向前扫描,直到找到比基准值小的记录(left != righ),并替换首索引对应的值;
(4)然后,首索引向后扫描,直到找到比基准值大于的记录(left != righ),并替换尾索引对应的值;
(5)若在扫描过程中首索引等于尾索引(left = right),则一趟排序结束;将基准值(key)替换首索引对应的值;
(6)再进行下一趟排序时,待排序列被分成两个区:[0,left-1],[righ+1,end]
(7)对每一个分区重复步骤2~6,直到所有分区中的记录都有序,排序成功。

图解:

2、代码实现

/*** 快速排序演示* @author Lvan*/
public class QuickSort {public static void main(String[] args) {int[] arr = {5, 1, 7, 3, 1, 6, 9, 4};quickSort(arr, 0, arr.length - 1);for (int i : arr) {System.out.print(i + "\t");}}/*** @param arr        待排序列* @param leftIndex  待排序列起始位置* @param rightIndex 待排序列结束位置*/private static void quickSort(int[] arr, int leftIndex, int rightIndex) {if (leftIndex >= rightIndex) {return;}int left = leftIndex;int right = rightIndex;//待排序的第一个元素作为基准值int key = arr[left];//从左右两边交替扫描,直到left = rightwhile (left < right) {while (right > left && arr[right] >= key) {//从右往左扫描,找到第一个比基准值小的元素right--;}//找到这种元素将arr[right]放入arr[left]中arr[left] = arr[right];while (left < right && arr[left] <= key) {//从左往右扫描,找到第一个比基准值大的元素left++;}//找到这种元素将arr[left]放入arr[right]中arr[right] = arr[left];}//基准值归位arr[left] = key;//对基准值左边的元素进行递归排序quickSort(arr, leftIndex, left - 1);//对基准值右边的元素进行递归排序。quickSort(arr, right + 1, rightIndex);}
}

3、复杂度

  • 最优的情况下时间复杂度为:O( nlogn )
  • 最差的情况下时间复杂度为:O( n^2 )
  • 快速排序的平均时间复杂度也是:O(nlogn)
  • 最优的情况下空间复杂度为:O(logn) ;每一次都平分数组的情况
  • 最差的情况下空间复杂度为:O( n ) ;退化为冒泡排序的情况

java实现快速排序算法相关推荐

  1. Java的快速排序算法详解

    在进入这个话题之前大家可以想想,如果给你一个无序数组,要你处理成一个有序数组,你会怎么做? 可能是双循环的冒泡排序,可能拆开成多个子集合的再合并的希尔排序,排序算法很多,而现在要介绍的是另一种排序方法 ...

  2. JAVA 实现 快速排序算法

    2019独角兽企业重金招聘Python工程师标准>>> /*** 快速排序* * @param list*/public static void fastSorted(int[] l ...

  3. 快速排序算法 java 实现

    快速排序算法 java 实现 快速排序算法Java实现 白话经典算法系列之六 快速排序 快速搞定 各种排序算法的分析及java实现 算法概念 快速排序是C.R.A.Hoare于1962年提出的一种划分 ...

  4. 快速排序算法(基于Java实现)

    title: 快速排序算法(基于Java实现) tags: 快速排序算法 快速排序算法的原理与代码实现: 一.快速排序算法的原理 快排算法的思想是: 如果需要排序数组中下标从p到r之间的一组数据,我们 ...

  5. java随机数排序算法_理解快速排序算法

    快速排序在平均状况下,排序n个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n^2)次比较,但这种状况并不常见.事实上,快速排序通常明显比 其他Ο(n log n)算法更快,因为它的内部循环 ...

  6. 分治法在排序算法中的应用(JAVA)--快速排序(Lomuto划分、Hoare划分、随机化快排)

    分治法在排序算法中的应用--快速排序 时间复杂度:平均O(nlogn),最坏O(n^2) 如果说归并排序是按照元素在数组中的位置划分的话,那么快速排序就是按照元素的值进行划分.划分方法由两种,本节将主 ...

  7. JAVA快速排序算法实现

    JAVA快速排序算法实现 private static void quickSort(int[] arr, int start, int end) {if(start < end) {int b ...

  8. JAVA:实现QuickSort快速排序算法(附完整源码)

    JAVA:实现QuickSort快速排序算法 package com.thealgorithms.sorts;import static com.thealgorithms.sorts.SortUti ...

  9. java开发C语言编译器:把C实现的快速排序算法编译成jvm字节码

    有了前面一系列的铺垫和准备后,我们终于能走到至关重要的一刻.在本节,我们将用C语言开发快速排序算法,然后利用我们的编译器把它编译成java字节码,让C语言编写的快速排序算法能在java虚拟机上顺利执行 ...

最新文章

  1. 关于java static 关键字
  2. 听说有人快收权限掉了
  3. 接口测试工具Postman接口测试图文教程
  4. 用leangoo怎么做需求管理及规划?(产品Backlog、用户故事)
  5. 怎么在条码打印软件中修改数据库连接
  6. 使用Nativefier将web页面打包为桌面应用
  7. HDOJ---2571 命运[DP]
  8. 项目中发现 unity运行挂机放那大约半小时,运行项目变得越来越卡顿
  9. 三星s9更新android9.0,三星Galaxy S9/S9+ Android 9.0系统更新新进展
  10. springboot跨域处理
  11. HMC_Hamiltonian Monte Carlo 推导,代码
  12. 由于找不到vcruntime140_1.dll,无法继续执行代码
  13. 腾达u2无线网卡驱动Linux,腾达U2无线网卡驱动
  14. Pvr_ControllerModuleInit代码分析
  15. 【免费扩容onedrive】
  16. win10服务器修改远程密码,win10系统远程桌面保存密码后无法修改的解决方案...
  17. Android里的相对坐标
  18. TFTP服务器与客户端的安装
  19. [转]程序员生涯之我见 找到自己的兴趣所在
  20. 编译原理拉链回填技术c语言,编译原理笔记1:概述编译相关的基本知识

热门文章

  1. 快加入「我的最爱」吧 Python 开发者不容错过的30 个Github 开源专案(下)
  2. 有关ICP(Internet Cache Protocol)协议的总结(二)之RFC2187
  3. CSRF攻击原理和防护措施讲解
  4. 橙单微服务之批量导入
  5. html标签助手,TidExpress(HTML代码编辑优化助手)V2.0.2.1 正式版
  6. 7 DICOM成像协议编码实现-有损压缩和无损压缩解压
  7. pde与波长 sipm 关系_硅光电倍增管
  8. 能加密的写日记小工具(解压可用,无需安装)
  9. java swt shell_一个java swt桌面程序开发到打包的总结(1)
  10. 朴素贝叶斯(Naive Bayes)分类和Gaussian naive Bayes