【基本思想】

快速排序在元素较多的情况下,排序效率是相当高的。其基本思想是这样:

假设数组为int[] arr = { 49, 38, 65, 97, 76, 13, 27, 22, 26, 41, 13, 17, 32 },数组元素个数为13个。

选定a[0]为left标记,a[12]为right标记,基准点pivot的初始位置一般也为a[0](其值记为p)。

定义i,j分别代表了不断变化的left和right标记。

此时,先让基准点归位。即以p为基准,左侧元素均小于p,右侧元素均大于p。

具体即为:

1.左标记不断右移,比较p与所在位置元素的大小,若比p大,停止比较,记下此点;

2.右标记不断左移,比较p与所在位置元素的大小,若比p小,停止比较,记下此点;

3.交换左右标记;

4.直至左右标记重合,这个位置就是基准点的位置。

然后被基准点分开的这两小段序列重复上述步骤。

【代码实现】

     public static void quickSort(int[] arr, int left, int right) {
// 如果left不小于right,需要排序的部分只有一个元素,方法结束调用。
if (left >= right) {
return;
}
// 将最左侧的元素设置为pivot(基准点)
int p = arr[left];
// 把比p小的放到左边,比p大的放到右边。
int i = left, j = right;
while (i < j) {
// j向左移,找到一个比p小的元素。
while (arr[j] >= p && i < j) {
j--;
}
// i向右移,找到一个比p大的元素。
while (arr[i] <= p && i < j) {
i++;
}
// i和j交换。
if (i < j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
// 让基准点归位,此时i与j是相同的,用谁都行。
arr[left] = arr[i];
arr[i] = p;
// 基准点左侧序列的元素递归进行快速排序。
quickSort(arr, left, i - 1);
// 基准点右侧序列的元素递归进行快速排序。
quickSort(arr, i + 1, right);
}

Java中常见的排序方式-快速排序(升序)的更多相关文章

  1. Java中常见的排序方式-冒泡排序(升序)

    [基本思想] 假设数组为int[] a = { 49, 38, 65, 97, 76, 13, 27 },数组元素个数为7个. 第1轮比较:先是a[0]与a[1]比较,大于则先交换,再比较a[1]和a ...

  2. Java中常见的排序方式-选择排序(升序)

    [基本思想] 假设数组为int[] a = { 49, 38, 65, 97, 76, 13, 27 },数组元素个数为7个. 第1轮比较:先是a[0]与a[1]比较,大于则先交换,再比较a[0]和a ...

  3. Java中常见的排序方法

    本博主要介绍Java中几种常见的排序算法: /* 排序方法的演示1)插入排序(直接插入排序.希尔排序)2)交换排序(冒泡排序.快速排序)3)选择排序(直接选择排序.堆排序)4)归并排序5)分配排序(基 ...

  4. Java中常见的排序算法

    这是我摘取的一段英文资料.我认为学习算法之前,对各种排序得有个大致的了解: Sorting algorithms are an important part of managing data. At ...

  5. 使用jdk中提供的排序方式

    package com.bjpowernode.t01; import java.util.Arrays; /** * 使用jdk中提供的排序方式 * */public class TestArray ...

  6. Java基础-JAVA中常见的数据结构介绍

    Java基础-JAVA中常见的数据结构介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是数据结构 答:数据结构是指数据存储的组织方式.大致上分为线性表.栈(Stack) ...

  7. Java中常见的注解

    Java中常见的注解 1.JDK自带的注解@Override  @Deprecated  @Suppvisewarnings 常见第三方注解 Spring:@Autowired  @Service  ...

  8. Java中的经典算法之快速排序(Quick Sort)

    Java中的经典算法之快速排序(Quick Sort) 快速排序的思想 基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小, 然后再按此方法对 ...

  9. asp.net开发中常见公共捕获异常方式总结(附源码)

    本文实例总结了asp.net开发中常见公共捕获异常方式.分享给大家供大家参考,具体如下: 前言:在实际开发过程中,对于一个应用系统来说,应该有自己的一套成熟的异常处理框架,这样当异常发生时,也能得到统 ...

随机推荐

  1. MVC5访问SQL Server数据库

    参考: MVC5+EF6简单实例---以原有SQLServer数据库两表联合查询为例 1.新建MVC项目: 新建基于MVC5的项目,命名为PracticeProject 2.Models文件夹(右击) ...

  2. Maven安装与配置及使用

    下载及安装 官方下载地址:直达官网下载页面 进入下载页面后,根据你电脑所装jdk版本选择对应版本的maven进行下载. 我们可以看到该页上边红框内写明了,maven3.3版以上支持的是JDK1.7+的 ...

  3. 前端 ----jQuery的文件操作

    06-jQuery的文档操作***   之前js中咱们学习了js的DOM操作,也就是所谓的增删改查DOM操作.通过js的DOM的操作,大家也能发现,大量的繁琐代码实现我们想要的效果.那么jQuery的 ...

  4. MD5算法工具类

    抽时间写了一个算法工具类,目前支持的算法有SHA1,SHA256,SHA384,SHA512,MD5,同时支持获取文件的MD5值. 使用方法如下: 获取字符串的MD5值 String str= Alg ...

  5. 18)django-模板的过滤器和tag,自定义simple_tag和filter

    模板过滤器是在变量被显示前修改它的值的一个简单方法. 过滤器使用管道字符 . 模板标签(template tag) .标签(tag)定义比较明确,即: 仅通知模板系统完成某些工作的标签.  一:dja ...

  6. kindeditor用法简单介绍(转)

    1,首先去官网下载http://www.kindsoft.net/ 2,解压之后如图所示: 由于本人做的是用的是JSP,所以ASP,PHP什么的就用不上了,直接把那些去掉然后将整个文件夹扔进Myecl ...

  7. HTML5-长按事件

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title> ...

  8. DSB

    Linux day01 计算机硬件知识整理 作业要求:整理博客,内容如下 编程语言的作用及与操作系统和硬件的关系 应用程序->操作系统->硬件 cpu->内存->磁盘 cpu与 ...

  9. Pychram IDE链接MySQL下更新数据的问题总结

    一.今天下午的数据库更新问题做个总结,数据更新的时候出现如下报错: Failed to retrieve routines in mysite_db.[42S02][1146] Table 'mysq ...

  10. bzoj 2186

    非常有趣的题 题意:求1~N!中有多少个与M!互质的数,T组询问,答案对R取模 题解: 首先,因为N>M,所以N!>M!,所以答案一定有一部分是φ(M!) 接下来做一些分析: 引理: 若x ...