快速排序
思路:
快速排序算法用到了分治的思想,通过一轮的排序,可以将序列分割成独立的两个部分,其中一部分的值<基准值,另一部分的值>基准值。而后针对两部分再按照同样的算法进行排序,直到序列整体有序。
public class QuickSort{
public static void quickSort(int[] arr,int low,int high){
if(low<high){
int index=getIndex(arr,low,high); // 找基准数据的正确索引
quickSort(arr,low,index-1);
quickSort(arr,index+1,high);
}
}
public static int getIndex(int[] arr,int low,int high){
int base=arr[low]; // 基准数据
while(low<high){
while(low<high && arr[high]>=base){ //若arr[high]<=base就是降序
high--;
}
arr[low]=arr[high]; // 如果队尾元素小于tmp,需要将其赋值给low
while(low<high && arr[low]<=base){
low++;
}
arr[high]=arr[low]; // 当队首元素大于tmp时,需要将其赋值给high
}
arr[low]=base; //还原正确的值
return low; // 返回排序后base的下标
}
}
测试一下: