【排序算法】快速排序算法 Java实现
快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。
基本思想
- 先从数组中找出一个数作为基准数
- 分区过程,将比这个数小的数全部放到它的左边,大于它的数全部放到右边
- 再对左右区间重复第二步,直到各区间都只有一个数
排序过程
在一篇博客上看到一个很有趣的讲解方法:叫做 挖坑填数+分治法。
假如有一个10个数的数组:i=0,j=9,pivot=array[i]=x
由于已经array[0]中的数保存到pivot中,可以理解成在数组array[0]上挖了个坑,可以将其他数据填充到这里来。
然后j向前找比当前基准数pivot小的数,当符合条件时(比如是第8个参数),那么将array[8]挖出填充到array[0]这个坑。这时就多出了array[8]这个坑,于是从i开始向后找大于pivot的数,填充array[8]这个坑。
重复操作。
最后i==j时会退出循环,这时多出了array[i]这个坑,怎么办呢?将pivot填充到array[i]。这时对左右两个区间继续进行排序就好了。
算法实现
/**
* 快速排序
*/
public class QuickSort {
public void sort(int[] array) {
quickSort(array, 0, array.length - 1);
}
/**
* 通过划分,基于分治思想,递归执行子任务排序最后合并
* @param low 数组首位索引
* @param high 数组末尾索引
*/
private void quickSort(int[] array, int low, int high) {
int pivotPos;
if (low < high) {
pivotPos = partition(array, low, high);
quickSort(array, low, pivotPos - 1);
quickSort(array, pivotPos + 1, high);
}
}
/**
* 简单划分方法
*/
private int partition(int[] array, int i, int j) {
int pivot = array[i]; // array[i] 就是 第一个坑
while (i < j) {
while (i < j && array[j] >= pivot) {
j--; // 从右向左找出小于基准数pivot的数来填充array[i]
}
if (i < j) {
array[i] = array[j]; // 将array[j]填充到array[i]中,array[j]就形成了一个新的坑
i++;
}
while (i < j && array[i] <= pivot) {
i++; // 从左向右找出大于基准数pivot的数来填充array[j]
}
if (i < j) {
array[j] = array[i]; // 将array[i]填充到array[j]中,array[i]就形成了一个新的坑
j--;
}
}
array[i] = pivot; // 退出时,i等于j。将pivot填到这个坑中。
return i;
}
}
参考文章:
1. http://blog.csdn.net/morewindows/article/details/6684558
2. http://shiyanjun.cn/archives/800.html
【排序算法】快速排序算法 Java实现的更多相关文章
- 排序算法-快速排序(Java)
package com.rao.sort; import java.util.Arrays; /** * @author Srao * @className QuickSort * @date 201 ...
- 桶排序与快速排序算法结合-python实现
#-*- coding: UTF-8 -*- import numpy as np from QuickSort import QuickSort def BucketSort(a, n): barr ...
- C#快速排序算法基础入门篇
相信算法对于许多开发人员来说都是一大难点,之所以难,就像设计模式一样,许多人在阅读之后,没有很好地理解,也不愿意动手上机操作,只停留在理论的学习上面,随着时间推移就慢慢淡忘. 有些东西,你可以发明创造 ...
- 数据结构65:快速排序算法(QSort,快排)
上节介绍了如何使用起泡排序的思想对无序表中的记录按照一定的规则进行排序,本节再介绍一种排序算法——快速排序算法(Quick Sort). C语言中自带函数库中就有快速排序——qsort函数 ,包含在 ...
- 排序系列 之 快速排序算法 —— Java实现
基本思想: 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变 ...
- 排序算法系列:快速排序算法JAVA版(靠谱、清晰、真实、可用、不罗嗦版)
在网上搜索算法的博客,发现一个比较悲剧的现象非常普遍: 原理讲不清,混乱 啰嗦 图和文对不上 不可用,甚至代码还出错 为了不误人子弟耽误时间,推荐看一些靠谱的资源,如[啊哈!算法]系列: https: ...
- 基本排序算法——快速排序java实现
简单的快速排序算法,我竟然花费了如此多的时间来写作,好好学习. /** * */ package basic.sort; import java.util.Arrays; import java.ut ...
- java 合并排序算法、冒泡排序算法、选择排序算法、插入排序算法、快速排序算法的描述
算法是在有限步骤内求解某一问题所使用的一组定义明确的规则.通俗点说,就是计算机解题的过程.在这个过程中,无论是形成解题思路还是编写程序,都是在实施某种算法.前者是推理实现的算法,后者是操作实现的算法. ...
- 《Java算法》排序算法-快速排序
排序算法-快速排序: /** * 给定一个数组:按照从小到大排序. * 思路: * 1. 获取第一个数放入临时变量data,将大于data的数放右边,小于data的数放在左边. * 2. data左边 ...
- 快速排序算法 java 实现
快速排序算法 java 实现 快速排序算法Java实现 白话经典算法系列之六 快速排序 快速搞定 各种排序算法的分析及java实现 算法概念 快速排序是C.R.A.Hoare于1962年提出的一种划分 ...
随机推荐
- 关于Apache,Mysql,PHP之间的关系
声明:以下为作者原创,转载请注明文章来源地址. 通过百度百科我们知道 Apache(全称Apache HTTP Server):是世界使用排名第一的Web服务器软件.可以在大多数计算机操作系统中运行, ...
- UVa 573 - The Snail
题目大意:有一只蜗牛位于深一个深度为h米的井底,它白天向上爬u米,晚上向下滑d米,由于疲劳原因,蜗牛白天爬的高度会比上一天少f%(总是相对于第一天),如果白天爬的高度小于0,那么这天它就不再向上爬,问 ...
- AndroidManifest.xml文件
AndroidManifest.xml常用标签解读 1.全局篇(包名,版本信息) 2.组件篇(四大组件) Activity Service Content Provider Broadcast Rec ...
- c++初学(电梯实验)
模拟电梯载人实验 Elevator.h class Elevator{public: Elevator(); ~Elevator(); void getNowNum(); ...
- Python dir()函数
您可以使用内置的dir()函数列出一个定义对象的标识符.例如,对于一个模块,包括在模块中定义的函数,类和变量. 当你给dir()提供一个模块名字时,它返回在那个模块中定义的名字的列表.当没有为其提供参 ...
- Angular - - ngChange、ngChecked、ngClick、ngDblclick
ngChange 当用户更改输入时,执行给定的表达式.表达式是立即进行执行的,这个和javascript的onChange事件的只有在触发事件的变化结束的时候执行不同. 格式:ng-change=”v ...
- js原生设计模式——9外观模式封装2(小型代码库YJ)
<script type="text/javascript"> //小型代码库YJ封装 var YJ = { //根据id获取元素 ...
- --@angularJS--较复杂的指令嵌套demo——综合小实例:登陆界面
1.index.html: <!DOCTYPE HTML><html ng-app="app"><head> <title>c ...
- win7配置自己的IIS服务器亲自做的图文很详细
跟人网站爱好初学者必看的win7系统配置自己的IIS,可以在你自己的电脑上配置网站服务器发不到网上,下面就跟着我的步骤一起做吧100%成功. 步骤/方法 点击开始-------控制面板这个就是 ...
- Google中Gson的使用解析json数据-------学习篇
之前写过一篇Gson解析json数据的基本应用,这里不多说,直接上例子. 有兴趣的可以先阅读下之前那篇,这里附上链接: http://www.cnblogs.com/Ant-soldier/p/632 ...