快速排序,顾名思义,是一种速度快,效率高的排序算法。
快排原理:
利用了分治的思想,在要排的数(比如数组A)中选择一个中心值key(比如A[0]),通过一趟排序将数组A分成两部分,其中以key为中心,key右边都比key大,key左边的都key小,然后对这两部分分别重复这个过程,直到整个有序。
整个快排的过程就简化为了一趟排序的过程,然后递归调用就行了。
挖坑填数法:
public class QucikSort {
public static void quickSort(int[] arr ,int start,int end) {
if(start<end) {
int getIndex = getIndex(arr,start,end);
quickSort(arr,start,getIndex-1);
quickSort(arr,getIndex+1,end);
}
}
public static int getIndex(int[] arr,int start,int end) {
int key = arr[start];
while(end > start) {
while(end>start&&arr[end] > key)
end--;
if(arr[end] <= key) {
int temp = arr[end];
arr[end] = arr[start];
arr[start] = temp;
}
while(end>start&&arr[start] <= key)
start++;
if(arr[start] >=key) {
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
}
}
return start;
}
public static void main(String[] args) {
int arr[] = {2,5,1,4,6,8,3,7};
for (int num : arr)
System.out.print(num + " ");
System.out.println();
quickSort(arr,0,arr.length-1);
for (int num1 : arr)
System.out.print(num1+" ");
}
}