将已知数组进行排序
代码如下:
public class MethodDemo15 {
public static void main(String[] args) {
//创建数组
int[] arr = {9, 8, 7, 6, 5, 4, 3, 2, 1};
//排序
quickSort(arr, 0, arr.length - 1);
//打印结果
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + ", ");
}
}
/**
* 快速排序
*
* @param arr 要排序的数组
* @param left 排序范围的开始位置
* @param right 排序范围的结束位置
*/
public static void quickSort(int[] arr, int left, int right) {
//递归出口
if (left > right) {
return;
}
//定义两个指针
int i = left;
int j = right;
//定义变量,记录基准数
int base = arr[left];
//如果两个指针没有碰撞,就需要继续向中间查找并交换
while (i < j) {
//指针j从右往左找,找比基准数小的元素
while (arr[j] >= base && i < j) {
j--;
}
//指针i从左往右找,找比基准数大的元素
while (arr[i] <= base && i < j) {
i++;
}
//如果两个指针没有碰撞,就交换指针处的元素
if (i != j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
//基准数和碰撞点的元素进行交换
arr[left] = arr[i];
arr[i] = base;
//递归调用自己,排序新的范围(碰撞点左边)
quickSort(arr, left, i - 1);
//递归调用自己,排序新的范围(碰撞点右边)
quickSort(arr, i + 1, right);
}
}