1,快速排序的基本思想:第一次递归:选取一个基准值,通过一移动数的位置将待排记录分隔成独立的两部分,移位后要求做到,基准数左边比基准数小,右边比基准数大,但是基准数两边的数值并不要求有任何值的比较。然后对基准数两边都用递归方式继续进行移动,保证每一次递归后的基准数左边比基准数小,右边比基准数大。最后自然而然就将顺序排好了。
2来看代码:解释在代码里,结果 [1, 2, 3, 4, 5, 6, 8, 10, 13]
import java.util.Arrays;
public class QuickSort {
public static void main(String[] args) {
int[] arr = new int[] {6,1,2,13,3,4,5,10,8};
quickSort(arr,0,arr.length -1);
System.out.println(Arrays.toString(arr));
}
public static void quickSort(int arr[],int left,int right) {
//递归要求第一步写结束递归的条件
if (left > right) {
return ;
}
//设置基准值是arr【0】
int base = arr[left];
//保留left和right目的保证下面的递归能正确找到相应位置
int i = left;
int j = right;
//经行位置移动
while (i != j) {
//寻找左边比基准值大的
while (arr[j] >= base && i < j) {
j--;
}
//寻找右边比基准值小的
while (arr[i] <= base && i < j) {
i++;
}
//将找到的左边比基准数大的数和右边比基准数小的数交换
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
//这里的arr【i】一定会比基准值小,因为arr【j】寻找的目标是比基准值大的数
//所以这里可以和arr【0】交换数值
arr[left] = arr[i];
arr[i] = base;
//按照刚刚思想,基数两边继续递归
quickSort(arr, left, i -1);
quickSort(arr, j+1, right);
}
}
因篇幅问题不能全部显示,请点此查看更多更全内容