快速排序:
使用分治策略,将数组按照比较值分类到两边,递归后,再进行分类到两边,比较简单,直接上代码:
public class QuickSort {
public static void sort(int[] arr,int left,int right){
if(right>left){
int mid=partion(arr,left,right);
sort(arr, left, mid-1);
sort(arr, mid+1, right);
}
}
public static int partion(int[] arr,int left,int right){
int compVal = arr[right];
int leftEdgeInd=left-1;
int tmpVal;
for(int i=0;i<right-left;i++){
if(arr[left+i]<compVal){
leftEdgeInd++;//如果有小于比较值的,则左边的低于比较值的边界+1,并且把这个值和加1后的边界上的值进行交换,边界上可能是小于比较值,也可能是大于比较值
tmpVal=arr[left+i];
arr[left+i]=arr[leftEdgeInd];
arr[leftEdgeInd]=tmpVal;
}
}
System.out.println("insertion result "+ left+" "+right+" "+leftEdgeInd);
tmpVal=arr[right];
arr[right]=arr[leftEdgeInd+1];
arr[leftEdgeInd+1]=tmpVal;
return leftEdgeInd+1;
}
}