首先需要声明,我这这里并没有图例,
所以将以各位小伙伴先去了解此算法的思想再回过来看代码
/**
* 实现快速排序
*/
public class quicksort {
/**
* 快速排序的核心思想其实也是交换
* 设立两个指针左指针和右指针,分别指向头和尾,再从数组中选定一个用来比较的值(基准值)
* 让左指针向右移动,右指针向左移动
* 当左指针指向的值大于基准值,就停下
* 当右指针指向的值小于基准值,就停下
* 此时将左右指针的值进行交换
* * @param arr 需要排序的数组
* @param left 数组的左边界
* @param right 数组的右边界
*/
public static void quick_sort(int[] arr,int left,int right){
/**
* 递归退出条件
*/
if(left > right){
return ;
}
int lo = left;
int hi = right;
int pivot = arr[left];//获取基准值
while(lo < hi){
//如果右指针值大于基准值,就--
while(arr[hi] >= pivot && lo < hi){
hi--;
}
//如果左指针值小于基准值,就++
while(arr[lo] <= pivot && lo < hi){
lo++;
}
//将左右指针的值进行交换
if(lo < hi){
int temp = arr[lo];
arr[lo] = arr[hi];
arr[hi] = temp;
}
}
/**
* 每一次交换玩后需要将基准值和左右指针指向的值进行交换位置
* 具体可以debug一下
*/
arr[left] = arr[hi];
arr[hi] = pivot;
//每一次排序都是让pivot左边的值都小于pivot
//每一次排序都是让pivot右边的值都大于pivot
//也就是说每一次排序都是将pivot放在了数组中合适的位置
//所以接下来只需要分别对pivot左边和右边的值再进行排序即可
quick_sort(arr,left,hi-1);
quick_sort(arr,hi+1,right);
}
public static void main(String[] args) {
int[] arr = {9,8,7,2,6,5,5,7,4,4};
quick_sort(arr,0,arr.length-1);
System.out.println(Arrays.toString(arr));
}
}