玩博客园很多年,第一次写点什么,就从基础开始吧。最近去面试,发现自己算法忘光了,赶紧复习下。以下代码自带测试类,复制进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. BZOJ4117 : [Wf2015]Weather Report

    一种天气情况的概率只与4种天气的出现次数有关,故将相同概率的情况计数后放入堆中模拟哈夫曼树即可. 每次取出概率最小的,将它个数除以2,对于零头需要特判. #include<cstdio> ...

  2. 【转】vim格式化C代码

    转自:http://blog.chinaunix.net/uid-24774106-id-3396220.html 在自己的目录下编辑自己的.vimrc, vim ~/.vimrc 添加下面的几行: ...

  3. IOS本地通知

        发送通知: UILocalNotification *newNotification = [[UILocalNotification alloc] init]; if (newNotifica ...

  4. html学习:插入优酷视频

    第31期 读反心灵鸡汤 认清自己 擦,为什么不行??? <p>第31期 读反心灵鸡汤 认清自己</p> <div id="youku"> < ...

  5. Windows Phone Foreground Toast

    Basically ToastPrompt is an UI component that derives from the Coding4Fun toolkit's abstract PopUp&l ...

  6. css圆角边框

    一.CSS3圆角的优点 传统的圆角生成方案,必须使用多张图片作为背景图案.CSS3的出现,使得我们再也不必浪费时间去制作这些图片了,而且还有其他多个优点: * 减少维护的工作量.图片文件的生成.更新. ...

  7. [LintCode] Valid Number 验证数字

    Validate if a given string is numeric. Have you met this question in a real interview? Yes Example & ...

  8. Java Web include指令和动作的区别

  9. javascript特效--制作背景电子钟(整点时祝贺生日快乐)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. 关于ueditor1_4_3 上传出现无法加载配置的问题

    我的解决方案是: 1. 检查 ueditor.config.js  中的 serverUrl: URL + "/net/controller.ashx" 的配置,记得一定用绝对路径 ...