本文带来八大排序算法之快速排序算法。

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

因此快速排序有一个重要概念就是分区。如何分区,则需要找一个中轴值(pivot),不同的版本的快速排序算法对中轴值pivot的选择不同:

1.总是选择第一个元素为中轴值pivot;

2.总是选择最后一个元素为中轴值pivot;

3.随机选择一个元素为中轴值pivot;

4.选择中间的元素为中轴值pivot(本文下面的代码按此选择)

代码实现:

import java.util.Arrays;public class QuickSort {public static void main(String[] args){int[] arr = {-9, 78, 0, 23, -567, 70};quickSort(arr, 0, arr.length-1);System.out.println(Arrays.toString(arr));}public static void quickSort(int[] arr, int left, int right){int l = left; //用于记录左下标int r = right; //用于记录右下标int pivot = arr[(left + right) / 2]; //中轴值int temp = 0; //临时变量 作为交换时使用//while循环目的是让 比pivot小的值放到其左边//比pivot大的放到右边while(l < r){//在pivot的左边一直找,找到大于等于pivot值,才退出while(arr[l] < pivot){l = l + 1;}//在pivot的右边一直找,找到小于等于pivot值,才退出while(arr[r] > pivot){r = r - 1;}//如果 l>= r 说明pivot的左右两边的值,已经按照//左边全部是小于等于pivot,右边全部是大于等于pivot的值if(l >= r){break;}//交换temp = arr[l];arr[l] = arr[r];arr[r] = temp;//如果交换完之后,发现arr[l] == pivot , r-- 前移if(arr[l] == pivot){r = r - 1;}//如果交换完之后,发现arr[r] == pivot , l++ 后移if(arr[r] == pivot){l = l + 1;}}//如果 l == r , 必须 l++, r--, 否则出现栈溢出if(l == r){l = l + 1;r = r - 1;}//向左递归if(left < r){quickSort(arr, left, r);}//向右递归if(right > l){quickSort(arr, l, right);}}
}

Java实现快速排序 Quick Sort相关推荐

  1. 快速排序 Quick Sort

    快速排序 Quick Sort 我们已经知道,在决策树计算模型下,任何一个基于比较来确定两个元素相对位置的排序算法需要Ω(nlogn)计算时间.如果我们能设计一个需要O(n1ogn)时间的排序算法,则 ...

  2. 【排序算法】快速排序(Quick Sort)

    快速排序(Quick Sort)使用分治法算法思想. 快速排序介绍 它的基本思想是: 选择一个基准数,通过一趟排序将要排序的数据分割成独立的两部分:其中一部分的所有数据都比另外一部分的所有数据都要小. ...

  3. Golang TDD实践报告:快速排序Quick Sort

    Golang TDD实践报告:快速排序Quick Sort [阅读时间:约5分钟] 0.项目需求 1.编写符合项目输入输出的一个测试 2.尝试运行测试 3.先使用最少的代码来让失败的测试先跑起来 4. ...

  4. C语言快速排序 quick sort 算法(附完整源码)

    快速排序 quick sort 算法 快速排序 quick sort 算法的完整源码(定义,实现,main函数测试) 快速排序 quick sort 算法的完整源码(定义,实现,main函数测试) # ...

  5. 快速排序 (Quick Sort)(Java实现)

    快速排序(Quicksort)是对冒泡排序的一种改进,借用了分治的思想,由C. A. R. Hoare在1962年提出. 1.基本思想 快速排序的基本思想:挖坑填数+分治法. 首先选一个轴值(pivo ...

  6. 快速排序quick sort

    一.快速排序的基本思想: 1.在集合中找一个数作为基准数: 2.集合分为三部分:左分区.基准数.右分区,其中左分区的数都小于等于基准数,右分区的数都大于等于基准数: 3.分别对左分区.右分区执行第2步 ...

  7. 基础算法之快速排序Quick Sort

    原理 快速排序(Quicksort)是对冒泡排序的一种改进. 从数列中挑出一个元素,称为"基准"(pivot); 排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的 ...

  8. 两种风格的快速排序 Quick Sort

    啊哈算法中的quick_sort.cpp // // Created by jal on 18-9-2. // #include <bits/stdc++.h>using namespac ...

  9. 快排Java代码实现(Quick Sort)

    1.  快排算法思路 基本思想:通过一趟快速排序将待排数组分割成独立的两份部分; 其中一部分数组的值均比另一部分数组的值小,则可分别对着两部分数组继续进行排序,以达到整个序列有序. 快排的平均时间复杂 ...

最新文章

  1. RISC-V生态未来的三种可能~
  2. RESTful编程究竟是什么?
  3. c语言Winmain 错误,C语言编译错误 undefined reference to `WinMain@16'
  4. 更改apk安装包对android系统等级要求
  5. Power Automate Desktop概览
  6. Let‘s Fluent:更顺滑的MyBatis
  7. GTimeSheet正式启用官方网站
  8. 算法分析与设计「一」枚举
  9. 弃用 Oracle!
  10. 华农2012年java答案_2012年计算机二级Java应用章节练习题及答案
  11. 银行排队问题之单队列多窗口服务 (25 分)(结构体排序)
  12. PMP认证的教材更新到第几版了?
  13. pdg转pdf的正确方法!!
  14. 人工智能与大数据就业前景_人工智能就业方向及发展前景
  15. 10大动图:秒懂各种常用通信协议原理
  16. 微信分享本地视频到朋友圈,收藏或者对话
  17. perl q qq qr qw qx 区别与使用方法
  18. python选择哪个版本-Python下载哪个版本比较好?
  19. 基于51单片机来开发的智能感应开盖垃圾桶
  20. SQL SERVER增加文件组和文件

热门文章

  1. uva1515(模拟)
  2. 【学习笔记】关于最大公约数(gcd)的定理
  3. linux脚本中怎么直接替换,linux-如何快速替换IP
  4. agx 安装ros opencv_怎样在ROS下实现基于YOLO的px4无人机目标检测?
  5. ngTemplateOutlet递归的问题
  6. 用Perl做个简单”下载者病毒”
  7. Cesium原理篇:7最长的一帧之Entity(上)
  8. 短信猫编程的一些资料1(At指令发送短信)
  9. safehandle 和析构函数
  10. 扩展Jquery插件处理mouseover时内部有子元素时发生样式闪烁