算法研究之快速排序java版
2015-08-27 13:58
573 查看
很早之前就已经接触过快速排序算法了,面试当中也屡屡被问到,虽然明白其原理,但从未真正的用代码敲出来。
写关于算法的代码之前一定要原理想明白,不然就是盲目,在参考有关资料及自己的沉思之后,写出如下代码,中间出现了一些bug,但都很快解决了
如果有更好的优化算法,还请不吝赐教!!!!
源代码:
package com.zken.test; /** * @author iamzken * 排序算法 * 使用快速排序算法对一个数组从小到大排序 * 2015-8-27 13:40 */ public class Sorter { //获取中间索引,该索引对应的关键字把数组分为左右两部分,其中,左边的都比该索引对应的关键字小,右边的都比该索引对应的关键字大 public static int getMiddle(int[] a , int left , int right){ //随机取一个关键字,这里取left索引对应的关键字,相当于left索引对应的位置被挖了一个”坑“,需要下面的程序填补这个”坑“ int key = a[left]; //临界条件 while(left < right){ //当right > left && a[right] > key说明当前right索引所对应的关键字比key大,不需要交换 while(right > left && a[right] > key){ right--; } //程序能执行到这里说明当前right索引所对应的关键字比key小,需要交换,即补”坑“ a[left] = a[right]; //当left < right && a[left] < key说明当前left索引所对应的关键字比key小,不需要交换 while(left < right && a[left] < key){ left++; } //程序能执行到这里说明当前left索引所对应的关键字比key大,需要交换,即补”坑“ a[right] = a[left]; } //程序跳出了while循环,说明left已经等于right,下面两句也可以改为a[right]=key;return right; a[left] = key; return left; } public static void quickSort(int[] a , int left , int right){ //临界条件 if(left < right){ //获取中间索引 int middle = getMiddle(a, left, right); //对左边子数组递归排序 quickSort(a,left,middle-1); //对右边子数组递归排序 quickSort(a, middle+1, right); } } //测试程序 public static void main(String[] args) { int[] a = new int[]{9,3,7,8,2,0,6}; System.out.println("快速排序前的数组:"); int i = 0; while(i < a.length){ System.out.print(a[i]+"\t"); i++; } System.out.println(); Sorter.quickSort(a, 0, a.length-1); System.out.println("快速排序后的数组:"); i = 0; while(i < a.length){ System.out.print(a[i]+"\t"); i++; } } }
执行结果:
快速排序前的数组:
9 3 7
8 2
0 6
快速排序后的数组:
0 2 3
6 7
8 9
相关文章推荐
- Java计算工作小时数的方法(修正版)
- 很好的一篇设置Eclipse的文章
- Spring任务调度实战之Timer
- Spring笔记③--spring的命名空间
- Spring任务调度实战之Quartz Simple Trigger
- Spring任务调度实战之Quartz Cron Trigger
- java中判断字符串是否为数字的三种方法
- 工程师薪酬分析:Java 不是过去式
- Spring定时任务的几种实现
- RESTful Java client with RESTEasy client framework
- java-页面数据生成图片
- 快速排序算法Java
- spring学习笔记(26)——spring整合ehcache
- java常见错误以及可能原因
- spring包的作用解析
- java jdbc数据库操作
- 自动生成的R.java有时不可靠
- RESTful Java client with java.net.URL
- Struts2笔记——自定义拦截器
- Struts2笔记——自定义拦截器