折半插入排序
@Test
public void test(){
int[] arr = {12,2,6,1,5};
sort(arr);
System.out.println(Arrays.toString(arr));
}
public void sort(int[] arr){
for (int i=1; i
快速排序
@Test
public void test(){
int[] arr = {5, 2, 6, 12, 1,7,9};
sort(arr,0, arr.length-1);
System.out.println(Arrays.toString(arr));
}
//将[start+1,end]之间的元素分为两拨,左边的所有元素比arr[start]小,右边的所有元素比arr[start]大
public void sort(int[] arr,int start, int end){
if(start < end){
int left = start+1;
int right = end;
while(left=arr[start] && right>start){
right--;
}
if(left < right){
int temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
}
}
//经过上面的while,//如果right>start+1,那么说明在[start+1,end]之间的数分为两拨
//[start+1,right]之间的是比arr[start]小的数
//[right,end]之间的是比arr[start]大的数
//交换arr[start]与arr[right]
if(right > start + 1){
int temp = arr[start];
arr[start] = arr[right];
arr[right] = temp;
}
//此时[start,right-1]之间都是比arr[start]小的数据了,但是它们还未排序
//此时[right+1,end]之间都是比arr[start]大的数据了,但是它们还未排序
//所以需要分别对[start,right-1]、[right+1,end]之间元素重复上面的操作继续排序
sort(arr,start,right-1);
sort(arr,right+1,end);
}
}



