快速排序Java实现

来源:互联网 发布:php编写软件 编辑:程序博客网 时间:2024/06/17 03:58
/**
* 快速排序
*
* @author Mary
*
*/
public class QuickSort {
/**
* 采用“三数中值分割法”选取枢纽元(pivot)
*
* @param a
* 要比较的数组
* @param left
* 左边元素索引
* @param right
* 右边元素索引
* @return
*/
@SuppressWarnings("unused")
private static <AnyType extends Comparable<? super AnyType>> AnyType median3(
AnyType[] a, int left, int right) {
int center = (left + right) / 2;
if (a[center].compareTo(a[left]) < 0)
swapReferences(a, left, center);
if (a[right].compareTo(a[left]) < 0)
swapReferences(a, left, center);
if (a[right].compareTo(a[center]) < 0)
swapReferences(a, center, right);
swapReferences(a, center, right - 1);
return a[right - 1];
}
/**
* 数组中两个元素的交换
*
* @param a
* @param left
* @param center
*/
private final static <AnyType extends Comparable<? super AnyType>> void swapReferences(
AnyType[] a, int left, int center) {
AnyType temp = a[left];
a[left] = a[center];
a[center] = temp;
}
@SuppressWarnings("unused")
private static <AnyType extends Comparable<? super AnyType>> void quicksort(
AnyType[] a, int left, int right) {
AnyType pivot = median3(a,left,right);
//开始快速排序
int i = left,j = right-1;
for(;;){
while(a[++i].compareTo(pivot)<0){}
while(a[--j].compareTo(pivot)>0){}
if(i<j)
swapReferences(a, i, j);
else
break;
}
//重新获得枢纽元
swapReferences(a, i, right-1);
quicksort(a,left,i-1);
quicksort(a,i+1,right);
}
}
0 0