玩博客园很多年,第一次写点什么,就从基础开始吧。最近去面试,发现自己算法忘光了,赶紧复习下。以下代码自带测试类,复制进eclipse中右键 run as --》java application 即可。控制台清晰打印出快排的过程。

 package test;

 /**
*
* 排序算法测试类
*
*/
public class TestForSort { /**
* @param args
*/
public static void main(String[] args) {
int[] array = new int[] {4,1,5,3,2,6};
//快排
quicksort(array,0,array.length-1);
System.out.println("=======最终=========");
for(int a:array){
System.out.print(a);
}
} /**
* 快速排序
*
* @param int n[] 要排序的数组
* @param left 排序开始下标
* @param right 排序结束下标
* @return
*/
static void quicksort(int n[], int left, int right) {
int dp;
if (left < right) {
dp = partition(n, left, right);//分治法,返回中轴下标
quicksort(n, left, dp - 1);//左边递归快排
quicksort(n, dp + 1, right);//右边递归快排
}
} /**
* 快排核心算法,并返回中轴下标
* @param n 要分治的数组
* @param left 首位下标
* @param right 末位下标
* @return
*/
static int partition(int n[], int left, int right) { //数组的第一个作为中轴(顺道保留了左值)
int pivot = n[left];
System.out.println("==================排序前====================");
System.out.println("中轴值="+pivot);
System.out.println("=======每次分治========= ,left="+left+",n[left]="+n[left]+",right="+right+",n[right]="+right+"");
//左<右才执行,即为一直到i=j时为止,此时ij碰撞的位置就是中轴
while (left < right) {
//找到第一个比中轴小的数n[rigth]
while (left < right && n[right] >= pivot){
right--;
}
//把第一个比中轴小的输n[right]赋值给n[left],然后left右移一位
if (left < right){
System.out.println("把n["+right+"]赋值给n["+left+"],left右移一位");
n[left++] = n[right];
}
//找到第一个比中轴大的数n[left]
while (left < right && n[left] <= pivot){
left++;
}
//把第一个比中轴大的数n[left]赋值给n[right],并right左移一位
if (left < right){
System.out.println("把n["+left+"]赋值给n["+right+"],right右移一位");
n[right--] = n[left];
}
}
//中轴赋值给最终左值(下一个递归的中轴下标)
n[left] = pivot;
System.out.println("==================排序后====================");
System.out.println("中轴值="+pivot+"下标="+left);
System.out.println("left="+left+",n[left]="+n[left]+",right="+right+",n[right]="+right+""); for(int a:n){
System.out.print(a);
}
System.out.println();
//返回中轴下标
return left; }
}

java基础算法-快速排序的更多相关文章

  1. Java基础算法集50题

    最近因为要准备实习,还有一个蓝桥杯的编程比赛,所以准备加强一下算法这块,然后百度了一下java基础算法,看到的都是那50套题,那就花了差不多三个晚自习的时间吧,大体看了一遍,做了其中的27道题,有一些 ...

  2. 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 ...

  3. java基础算法之快速排序

    快速排序(Quicksort)是对冒泡排序的一种改进.在大学学过之后现在基本忘了,最近在好多地方都看到说快速排序在面试会问到,于是自己也准备重新拾起以前忘记的东西来,慢慢的积累自己的基础知识.figh ...

  4. java基础算法之冒泡排序

    接触冒泡算法还是大一了,学习C语言的冒泡算法.现在唯一记得就是冒泡与选择了.出来刚刚工作的时候觉的算法基本没撒用处,现在发现这些都是很好的基础.因此自己也准备重新拾起这些知识. 冒泡排序 泡排序是一种 ...

  5. Java基础(49):快速排序的Java封装(含原理,完整可运行,结合VisualGo网站更好理解)

    快速排序 对冒泡排序的一种改进,若初始记录序列按关键字有序或基本有序,蜕化为冒泡排序.使用的是递归原理,在所有同数量级O(n longn) 的排序方法中,其平均性能最好.就平均时间而言,是目前被认为最 ...

  6. java基础算法题

    为了提高自己的代码能力和算法能力,我决定每天学习一道算法题,吸收前辈思想. [程序1] TestRabbit.java 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三 ...

  7. java基础算法之插入排序

    一.插入排序介绍 插入排序(Insertion Sort)是一种简单直观的排序算法.它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入.插入排序在实现上,通 ...

  8. java基础算法之选择排序

    选择排序 选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完. ...

  9. Java排序算法——快速排序

    import java.util.Arrays; //================================================= // File Name : Arrays_Q ...

随机推荐

  1. BZOJ3566 : [SHOI2014]概率充电器

    选个根把无根树转化成有根树, 设f[i]表示i不通电的概率 则 答案为对于枚举树根root进行DP后1-f[root]的和 直接算是O(n^2)的,但是n有500000,所以不能过. 对于这样一棵以1 ...

  2. div+css定位position详解

    div+css定位position详解 1.div+css中的定位position 最主要的两个属性:属性 absolute(绝对定位) relative(相对定位),有他们才造就了div+css布局 ...

  3. leetcode Linked List Cycle

    Given a linked list, determine if it has a cycle in it. Follow up:Can you solve it without using ext ...

  4. jquery delay()介绍及使用指南

    .delay()是用来在jQuery动画效果和类似队列中是最好的.但是,由于其本身的限制,比如无法取消延时——.delay(),它不是JavaScript的原生 setTimeout函数的替代品,这可 ...

  5. 【BZOJ】3676: [Apio2014]回文串

    http://www.lydsy.com/JudgeOnline/problem.php?id=3676 题意:给一个串求回文串×出现次数的最大值.(|S|<=300000) #include ...

  6. There was an internal API error.

    1.一开始以为是用了 iOS8的API, 抱着不相信的态度,我搜到了一条原因,可能是没有选择对开发者账号或需要 cmd+shift+k 来 clean 一下,无效. 2.又继续盯着这个问题,才发现我的 ...

  7. OpenERP在哪储存附件?

    我们知道对OpenERP中的每个内部对象(比如:业务伙伴,采购订单,销售订单,发货单,等等)我们都可以添加任意的附件,如图片,文档,视频等.那么这些附件在OpenERP内部是如何管理的呢? 默认情况下 ...

  8. Windows8.1自定义快捷方式添加到开始屏幕

    Windows8.1自定义快捷方式添加到开始屏幕 将快捷方式复制到如下路径,在开始屏幕的所有中找到对应快捷方式,右键选择添加到开始屏幕即可. C:\Users\%USERNAME%\AppData\R ...

  9. 安卓APP测试之使用Burp Suite实现HTTPS抓包方法

    APP的测试重点小部分在APP本身,大部分还是在网络通信上(单机版除外).所以在安卓APP测试过程中,网络抓包非常重要,一般来说,app开发会采用HTTP协议.Websocket.socket协议,一 ...

  10. Maven下载安装

    1.maven下载地址 https://maven.apache.org/配置:M2_HOME D:\tool\mvn\apache-maven-3.3.9 PATH %M2_HOME%/bin3.命 ...