快速排序和冒泡排序相似,都是通过多次比较和交换来实现排序。
  具体流程如下:
  1、首先设定一个分界值,通过分界值将数组分成左右两部分,将大于等于分界值的数据交换集中到右侧数组,将小于分界值的数据交换集中到左侧数组;
  2、然后,左侧数组和右侧数组可以独立排序。对于左侧数组可以取一个分界值,将左侧数组分成左右两个部分,同样将左边放置小于分界值的数据,右侧放置大于等于分界值的数据。对右侧数组做类似处理。
  3、重复上述过程,其实就是递归。通过递归将左侧数组排好序后,再递归处理右侧数据。当左、右两部分数据都排好序后,整个数组的排序也就完成了。
    
  假如有初始数据:25  11  45  26  12  78。
  1、首先设定一个分界值,这里选择第一个元素---25。在变量left中保存数组的最小序号0,在变量right中保存数组的最大序号6,在变量base中保存分界值25。
  2、从数组右侧开始,逐个与分界值25比较,直到找到小于base的数据为止。这里,12 就比分界值25小。
  3、将右侧比分界值小的数据,保存到 A[left](A[0])元素中。
  4、从数组左侧开始,逐个与分界值25比较,直到找到大于等于base的数据为止。这里,数组最左侧的数据为12,比分界值小,将left自增1,再取A[left](A[1])的值为45,因45大于25,结束查找。
  5、将左侧比分界值大的数保存到A[right]元素中。
  6、将分界值保存到A[left]中。经过一轮比较和交换,base数据左侧的数都是比base值小的数,右侧都是比base值大的数。
  7、接下来,通过递归调用,将left左侧的数据进行同样的排序,再将left右侧的数据进行同样的排序。
 
  快速排序对冒泡排序进行了改进,因此具有更好的执行效率。平均时间复杂度是O(nlogn)。
 
  Java 代码实现如下:(https://github.com/xbk417/algorithm
     public void sort(int[] arr) {
quickSort(arr, 0, arr.length - 1);
} private static void quickSort(int[] arr, int left, int right){
int t;
int ltemp = left;
int rtemp = right;
// 分界值
int fIndex = arr[(left + right)/ 2];
while(ltemp < rtemp) {
// 从左侧开始查找比分界值大的数
while(arr[ltemp] < fIndex) {
// 元素小于分界值,继续查找
++ltemp;
}
// 从右侧开始查找比分界值小的数
while(arr[rtemp] > fIndex) {
// 元素大于分界值,继续查找
--rtemp;
}
// 如果查到的比分界值大的数的下标小于等于比分界值小的数的下标,则进行交换
if(ltemp <= rtemp) {
t = arr[ltemp];
arr[ltemp] = arr[rtemp];
arr[rtemp] = t;
--rtemp;
++ltemp;
}
if(ltemp == rtemp) {
ltemp++;
}
System.out.println( Arrays.toString(arr));
if(left < rtemp) {
quickSort(arr, left, ltemp - 1);
}
if(ltemp < right) {
quickSort(arr, rtemp + 1, right);
}
}
}

常用算法Java实现之快速排序的更多相关文章

  1. 算法-java代码实现快速排序

    快速排序 对于一个int数组,请编写一个快速排序算法,对数组元素排序. 给定一个int数组A及数组的大小n,请返回排序后的数组. 测试样例: [1,2,3,5,2,3],6 [1,2,2,3,3,5] ...

  2. 排序算法Java实现(快速排序)

    算法描述:对于一组给定的记录,通过一趟排序后,将原序列分为两部分,其中前一部分的所有记录均比后一部分的所有记录小,然后再依次对前后两部分的记录进行快速排序,递归该过程,直到序列中的所有记录均有序为止. ...

  3. 常用算法Java实现之选择排序

    选择排序算法在每一步中选取最小值来重新排序,通过选择和交换来实现排序. 具体流程如下: 1.首先从原数组中选择最小的1个数据,将其置于第一个位置. 2.然后从剩下的数据中再选择其中最小的一个数据,并将 ...

  4. 常用算法Java实现之冒泡排序

    冒泡排序是所有排序算法中最基本.最简单的一种.思想就是交换排序,通过比较和交换相邻的数据来达到排序的目的. 具体流程如下: 1.对要排序的数组中的数据,依次比较相邻的两个数据的大小. 2.如果前面的数 ...

  5. 常用算法Java实现之希尔排序

    希尔排序严格来说是基于插入排序的思想,又被称为缩小增量排序. 具体流程如下: 1.将包含n个元素的数组,分成n/2个数组序列,第一个数据和第n/2+1个数据为一对... 2.对每对数据进行比较和交换, ...

  6. 常用算法Java实现之直接插入排序

    直接插入排序是将未排序的数据插入至已排好序序列的合适位置. 具体流程如下: 1.首先比较数组的前两个数据,并排序: 2.比较第三个元素与前两个排好序的数据,并将第三个元素放入适当的位置: 3.比较第四 ...

  7. 常用算法之排序(Java)

    一.常用算法(Java实现) 1.选择排序(初级算法) 原理:有N个数据则外循环就遍历N次并进行N次交换.内循环实现将外循环当前的索引i元素与索引大于i的所有元素进行比较找到最小元素索引,然后外循环进 ...

  8. 快速排序算法 java 实现

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

  9. 【Java】-NO.13.Algorithm.1.Java Algorithm.1.001-【Java 常用算法手册 】-

    1.0.0 Summary Tittle:[Java]-NO.13.Algorithm.1.Java Algorithm.1.001-[Java 常用算法手册 ]- Style:Java Series ...

随机推荐

  1. PHP的抽象类和抽象方法以及接口总结

    PHP中的抽象类和抽象方法自己用的不多,但是经常会在项目中看到别人使用,同样,今天在看别人的代码的时候,发现使用了抽象类,就总结下: 抽象类:1.如果一个类中有一个方法是抽象方法,则这个类就是抽象类: ...

  2. 一、PHP基础-安装PHP集成环境

    目录 PHP运行集成环境下载 phpStudy集成环境安装 XAMPP集成环境安装 WampServer环境安装 作者:吴耀田  个人博客:http://www.cnblogs.com/isaacwy ...

  3. angular2路由之routerLinkActive指令

    angular2的routerLinkActive指令在路由激活时添加样式class .red{  color: red;}    <a routerLink="/user/login ...

  4. Spark运行模式_本地伪集群运行模式(单机模拟集群)

    这种运行模式,和Local[N]很像,不同的是,它会在单机启动多个进程来模拟集群下的分布式场景,而不像Local[N]这种多个线程只能在一个进程下委屈求全的共享资源.通常也是用来验证开发出来的应用程序 ...

  5. 生成Ipa安装包的plist文件后生成下载链接

    假设生成的plist文件的下载链接是: https://www.xx.com/download/xx.plist 那么如果想让苹果手机的浏览器点击后开始下载苹果软件包,则网页中的下载链接需要拼接成 i ...

  6. Quartus II 项目文件分类及内容

  7. WPF的退出

    很多时候,会自己写退出程序的代码. 比如,先显示登录框(LogIn),成功后隐藏它,并显示一个主窗体(MainWin),或者外部还调用了其他App,当你关闭MainWin不一定会直接退出整个程序的. ...

  8. Prism for WPF 搭建一个简单的模块化开发框架(六)隐藏菜单、导航

    原文:Prism for WPF 搭建一个简单的模块化开发框架(六)隐藏菜单.导航 这个实际上是在聊天之前做的,一起写了,也不分先后了 看一下效果图,上面是模块主导航,左侧是模块内菜单,现在加一下隐藏 ...

  9. c++动态库封装及调用(2、windows下动态库创建)

    DLL即动态链接库(Dynamic-Link Libaray)的缩写,相当于Linux下的共享对象.Windows系统中大量采用了DLL机制,甚至内核的结构很大程度依赖与DLL机制.Windows下的 ...

  10. 北京Uber优步司机奖励政策(10月26日~11月1日)

    用户组:优步北京人民优步A组(适用于10月26日-11月1日) 滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/ ...