快排在最坏情况下复杂度会达到O(n^2),需要进行优化。
:可以使每次的基准前后序列长度都大致相同,避免最坏情况的发生,所以需要使用一个线性级别的算法来找出序列的中位数:select线性时间选择算法。
实现源码:
package Keshe;
import java.util.Arrays;
public class Test {
private static Comparable[] bubble(int left, int right, Comparable []arr){ //冒泡排序,每次调用只起一次泡
Comparable temp;
for(int j=left;j<right;j++){
if(arr[j+1].compareTo(arr[j])<0)
swap(arr,j+1,j+2);
}
return arr;
}
private static Comparable[] bubbleSort(int left,int right,Comparable []arr){ //冒泡排序n-1次冒泡
Comparable temp;
for(int i=left+1;i<right;i++){
boolean YN = true;
for(int j=left;j<right-i;j++){
if(arr[j+1].compareTo(arr[j])<0){
swap(arr,j+1,j);
YN = false;
}
}
if(YN) break;
}
return arr;
}
public static Comparable select(int p,int r,int k,Comparable