用java实现快速排序的最优解法 时间复杂度为O(nlgn);
package coretext;
public class quickSort {
public static void main(String[] args) {
int[] array ={4,6,1,3,7,5,8,2};
QuickSort1 arr = new QuickSort1();
int[] a = arr.text(array, 8);
for(int i=0;i<8;i++)
System.out.println(a[i]);
}
}
class QuickSort1{
//快速排序
public int[] text(int A[],int n){
QSort(A,0,n-1);
return A;
}
//对一个数组排序
public void QSort(int A[],int low,int high) {
if(low<high) {
int n;
n=OneSort(A,low,high);
QSort(A,low,n-1);
QSort(A,n+1,high);
}
}
//对一个key值排序
public int OneSort(int A[],int low,int high) {
int key = A[low];
while(low<high) {
while(low<high && A[high]>=key) {
high--;
}
A[low]=A[high];
while(low<high && A[low]<=key) {
low++;
}
A[high]=A[low];
}
A[low]=key;
return low;
}
}
实现过程难点分析:主要在不用指针 用数组下标实现数组从头跟尾的双向遍历,遍历完一遍能确定出key值的固定位置,并且左边都小于等于key,右边都大于等于key;