快速排序:基于分治的思想,将数组以基准值放置两旁,不断细化下去。时间复杂度为O(nlogn)。
import java.util.Arrays;
public class Main {
public static void quickSort(int[] arr,int start_index,int end_index){
if (start_index >= end_index){
return;
}
//分治
int pivot_index = postion(arr,start_index,end_index);
//递归分治
quickSort(arr,start_index,pivot_index-1);
quickSort(arr,pivot_index+1,end_index);
}
private static int postion(int[] arr, int start_index, int end_index) {
//数组第一个元素为基准值
int pivot = arr[start_index];
int left = start_index;
int right = end_index;
while(left != right){
//找出右边小于基准值的元素
while(right>left && arr[right]>pivot){
right--;
}
//找出左侧大于基准值的元素
while(left<right && arr[left]<=pivot){
left++;
}
//两个元素交换
if (left<right){
int tem = arr[right];
arr[right] = arr[left];
arr[left] = tem;
}
}
//此时,left和right重合
int tem = arr[left];
arr[left] = arr[start_index];//arr[start_ndexx] == pivot
arr[start_index] = tem;
//此时,left、right、pivot_index三者重合
return left;
}
public static void main(String[] args){
int[] arr = {9,2,5,1,6,8,7,3,4};
quickSort(arr, 0, arr.length-1);
System.out.println(Arrays.toString(arr));
}
}