java基础算法之快速排序
快速排序(Quicksort)是对冒泡排序的一种改进。在大学学过之后现在基本忘了,最近在好多地方都看到说快速排序在面试会问到,于是自己也准备重新拾起以前忘记的东西来,慢慢的积累自己的基础知识。fighting
算法概念
快速排序由C. A. R. Hoare在1962(50多年了呢)年提出,它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列(摘自百度百科)。
快速排序采用了一种分治的策略,所以有时候我们也称为分治算法。
算法思想
1.先从数列中取出一个数作为基准数,一般会取第一个数做为基准数。
2.然后对数列进行分区,首先将比这个基准数大的数全放到它的右边,小于或等于基准数的数全放到它的左边(一刀切,左边小于基准数,右边大于基准数)。
3.再对划分的左右区间重复第二步,直到各区间只剩一个数就完成了排序。
下面画一个详细的大图,只画了第一趟排序的过程,知道第一躺怎么排序,后面都是一样的。

算法代码
package com.roc.Quicksort; /**
* 快速排序
*
* @author liaowp
*
*/
public class Quicksort {
static void sort(int value[], int left, int right) {
if (left < right) {// 判断左边的下标是小于右
int i = left, j = right;// i为小值,j为大值
int temp = value[left];// 默认中间数为temp,即最左边的数
while (i < j) {// 如果i<j
while (i < j && value[j] >= temp) {// 从右往左比较,如果i<j且value[j]>=temp
j--;
}
if (i < j) {// 如果i<j,找到有比中间数大的
value[i] = value[j];// 左边的数放右边的数
i++;// 左移一位
}
while (i < j && value[i] < temp) {// 从左往右找
i++;
}
if (i < j) {// 找到有比中间数小的,替换到右边
value[j] = value[i];
j--;
}
}
value[i] = temp;
for (int n = 0; n < value.length; n++) {
System.out.print(value[n] + " ");
}
System.out.println();
sort(value, left, i - 1);// 左边的重复
sort(value, i + 1, right);// 右边的重复
}
} public static void main(String[] args) {
int value[] = { 5, 1, 8, 4, 15 };
System.out.print("原始数据:");
for (int i = 0; i < value.length; i++) {
System.out.print(value[i] + " ");
}
System.out.println();
sort(value, 0, 4);
System.out.print("排序结果:");
for (int i = 0; i < value.length; i++) {
System.out.print(value[i] + " ");
}
} }
代码结果如下:
原始数据:5 1 8 4 15
4 1 5 8 15
1 4 5 8 15
1 4 5 8 15
排序结果:1 4 5 8 15
注意:第一遍快速排序不会直接得到最终结果,只会把比基准数大和比基准数小的数分到基准数的两边。为了得到最后结果,需要再次对基准数两边的数组分别执行此步骤,然后再分解数组,直到数组不能再分解为止(只有一个数据),才能得到正确结果。
java基础算法之快速排序的更多相关文章
- Java基础算法集50题
最近因为要准备实习,还有一个蓝桥杯的编程比赛,所以准备加强一下算法这块,然后百度了一下java基础算法,看到的都是那50套题,那就花了差不多三个晚自习的时间吧,大体看了一遍,做了其中的27道题,有一些 ...
- Java排序算法之快速排序
Java排序算法之快速排序 快速排序(Quicksort)是对冒泡排序的一种改进. 快速排序由C. A. R. Hoare在1962年提出.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分 ...
- Java基础算法
i++;++i; i--;--i; int a=5;int b=a++;++放在后面,表示先使用a的值,a再加1b=5,a=a+1,a=6 int c=5;int d=++c;++放在前面,表示先将c ...
- java基础算法-快速排序
玩博客园很多年,第一次写点什么,就从基础开始吧.最近去面试,发现自己算法忘光了,赶紧复习下.以下代码自带测试类,复制进eclipse中右键 run as -->java application ...
- java基础算法之冒泡排序
接触冒泡算法还是大一了,学习C语言的冒泡算法.现在唯一记得就是冒泡与选择了.出来刚刚工作的时候觉的算法基本没撒用处,现在发现这些都是很好的基础.因此自己也准备重新拾起这些知识. 冒泡排序 泡排序是一种 ...
- java基本算法之快速排序
快速排序:是找出一个元素(理论上可以随便找一个)作为基准(pivot),然后对数组进行分区操作,使基准左边元素的值都不大于基准值,基准右边的元素值 都不小于基准值,如此作为基准的元素调整到排序后的正确 ...
- java基础算法题
为了提高自己的代码能力和算法能力,我决定每天学习一道算法题,吸收前辈思想. [程序1] TestRabbit.java 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三 ...
- 算法相关——Java排序算法之快速排序(三)
0. 前言 本系列文章将介绍一些常用的排序算法.排序是一个非常常见的应用场景,也是开发岗位面试必问的一道面试题,有人说,如果一个企业招聘开发人员的题目中没有排序算法题,那说明这个企业不是一个" ...
- java基础算法之插入排序
一.插入排序介绍 插入排序(Insertion Sort)是一种简单直观的排序算法.它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入.插入排序在实现上,通 ...
随机推荐
- 前端学HTTP之URL
× 目录 [1]URI [2]URL语法 [3]字符[4]编码方法 前面的话 一般地,URL和URI比较难以区分.接下来,本文以区分URL和URI为引子,详细介绍URL的用法 URI与URL的区别 U ...
- Dagger2系列之使用方法
本系列只讲使用方法和使用中遇到的问题,如果还对dagger2还不了解的童鞋儿可以参考文章: http://www.jianshu.com/p/cd2c1c9f68d4 http://www.jians ...
- 用枚举enum替代int常量
枚举的好处: 1. 类型安全性 2.使用方便性 public class EnumDemo { enum Color{ RED(3),BLUE(5),BLACK(8),YELLOW(13),GREEN ...
- 《你不知道的JavaScript》整理(一)——作用域、提升与闭包
最近在读一本进阶的JavaScript的书<你不知道的JavaScript(上卷)>,里面分析了很多基础性的概念. 可以更全面深入的理解JavaScript深层面的知识点. 一.函数作用域 ...
- SQL Tuning 基础概述02 - Explain plan的使用
1.explain plan的使用 SQL> explain plan for delete from t_jingyu; Explained. SQL> select * from ta ...
- React-Native学习系列(一)
近段时间一直在忙,所以博客也没有更新,这两天我翻了一下写的这几篇博客,感觉写的都很片面,所以,我想重新写一个系列教程,从最基础的开始,来让大家更容易学会React-Native. 这个系列大部分只介绍 ...
- C#开发微信门户及应用(34)--微信裂变红包
在上篇随笔<C#开发微信门户及应用(33)--微信现金红包的封装及使用>介绍了普通现金红包的封装和使用,这种红包只能单独一次发给一个人,用户获取了红包就完成了,如果我们让用户收到红包后,可 ...
- 【python常用函数1】
## 1 ##获取输入值 a = raw_input("请输入:") if a == str(1): print "success" else: print & ...
- JDBC——Java代码与数据库链接的桥梁
常用数据库的驱动程序及JDBC URL: Oracle数据库: 驱动程序包名:ojdbc14.jar 驱动类的名字:oracle.jdbc.driver.OracleDriver JDBC URL:j ...
- ASP.NET路由[ASP.NET Routing]
ASP.NET路由[ASP.NET Routing] ASP.NET路由允许你在使用URL时不必匹配到网站中具体的文件,因为这个URL不必匹配到一个文件,你使用了描述用户行为且更容易被用户理解的URL ...