给定一个数组,对这个数组进行快速排序。
package IText;
public class QuickSort {
public static void main(String[] args){
int[] a = {49,38,65,97,76,13,27};
quickSort(a,0,a.length-1);
for(int x:a)
System.out.print(x+" ");
}
public static void quickSort(int[] arr,int start,int end){
int i = start;
int j = end ;
if((arr==null)||(arr.length==0))
System.out.println("数组为空");
while(i<j){
while(i<j&&arr[i]<=arr[j]){ //从后往前走,找比arr[0](key的初始值)小的第一个数
j--;
}
//找到这个数后交换
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
while(i<j&&arr[i]<arr[j]){ //从前往后走,找比key大的第一个数
i++;
}
//找到后两数交换
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
//对key分割出来的左右两个子数组继续快速排序。
if(i-start>1)
quickSort(arr,start,i-1);
if(end-i>1)
quickSort(arr,i+1,end);
}
}
算法的时间复杂度为 O(nlogn)