java实现快速排序两种方法
2015-08-30 20:28
513 查看
package com.zp.algorithm.basic; import java.util.Arrays; public class QuickSortDemo { public static<AnyType extends Comparable<? super AnyType>> void quickSort(AnyType[]a,int left,int right) { //从0开始 int i = left; int j = right; if(left>right) return; AnyType tmp = a[left];//基准数 while(i!=j) { //从右边往左直到找到比基准数小的。 while(a[j].compareTo(tmp)>0&&j>i) j--; //从左边往右直到找到比基准数大的。 while(a[i].compareTo(tmp)<=0&&i<j) i++; if(i<j) { AnyType bridge = a[i]; a[i] = a[j]; a[j] = bridge; } } // 最终将基准数归位 a[left]=a[i]; a[i]=tmp; quickSort(a,left,i-1);//继续处理左边的,这里是一个递归的过程 quickSort(a,i+1,right);//继续处理右边的 ,这里是一个递归的过程 } public static<AnyType extends Comparable<? super AnyType>> void quickSort2(AnyType[]a,int left,int right) { if(left<right) { int q = partition(a,left,right); quickSort2(a,left,q-1); quickSort2(a,q+1,right); } } private static<AnyType extends Comparable<? super AnyType>> int partition(AnyType[]a,int left,int right) { AnyType x = a[right]; int i = left-1; for(int j = left;j<=right-1;j++) { if(a[j].compareTo(x)<=0) { i = i+1; swap(a,i,j); } } swap(a,i+1,right); return i+1; } private static<AnyType extends Comparable<? super AnyType>> void swap(AnyType[] a,int x,int y) { //位置不同才需要交换 if(x!=y) { AnyType tmp = a[x]; a[x] = a[y]; a[y] = tmp; } } public static void main(String[] args) { // TODO Auto-generated method stub Integer [] a = {11,8,34,54,22,42,9,87}; Double [] d = {11.1,9.4,8.8,20.3,19.1}; Integer [] a2 = {2,8,7,1,3,5,6,4}; /* * 首先11是基准数,,当i!=j的时候从右边往左遍历找出小于11的数,位置用j记录。从左往右遍历找出比11大的数,位置为i, */ QuickSortDemo.quickSort(a, 0, a.length-1); QuickSortDemo.quickSort2(d, 0, d.length-1); System.out.println(Arrays.toString(d)); } }
相关文章推荐
- 给初学者之一:浅谈java及应用
- java
- 迈进Java:HelloWorld
- Java线程:概念与原理
- 新的班级,新的生活
- 新的班级,新的生活
- java并发编程第六章(3)使用阻塞式线程安全列表
- 【Java笔记】——抽象类和接口
- [笔记][Java7并发编程实战手册]4.4 在执行器中执行任务并返回结果Callable、Future
- java并发实战第六章(2)非阻塞式线程安全列表与一般List集合多线程情况下的比较
- 六种常见排序算法Java实现
- Spring笔记(第一弹:简单模拟Spring IOC)
- Java中泛型数组的实现
- SpringMVC Helloword
- java web技术搜索知多少(更新中)
- JavaEE程序编码规范
- Debug JDK source 无法查看局部变量的问题解决方案
- java并发编程实战第六章(1)并发集合介绍
- 开启java生活
- Java发送短信