用java写一个快速排序算法
时间: 2024-05-10 13:17:46 浏览: 3
好的,下面是Java实现的快速排序算法:
```java
public class QuickSort {
public static void main(String[] args) {
int[] arr = {5, 9, 3, 1, 8, 6, 4, 2, 7};
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) {
int pivot = partition(arr, left, right);
quickSort(arr, left, pivot - 1);
quickSort(arr, pivot + 1, right);
}
}
public static int partition(int[] arr, int left, int right) {
int pivot = arr[left];
int i = left + 1, j = right;
while (i <= j) {
while (i <= j && arr[i] < pivot) i++;
while (i <= j && arr[j] > pivot) j--;
if (i <= j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
i++;
j--;
}
}
arr[left] = arr[j];
arr[j] = pivot;
return j;
}
}
```
解释一下代码:
1. `quickSort`方法:首先判断左右指针,如果左指针小于右指针,则调用`partition`方法进行分区,然后递归调用`quickSort`方法左右两部分进行排序。
2. `partition`方法:选择最左边的元素作为基准(也可以随机选择),然后使用两个指针i和j从左右两边向中间扫描。当i指向的元素小于基准元素时,i向右移动;当j指向的元素大于基准元素时,j向左移动。当i和j都停止移动时,如果i小于等于j,则交换ai和aj的位置,并且i和j都向中间移动一位。最后将基准元素放到j的位置,返回j的下标。
运行程序,输出结果为:`[1, 2, 3, 4, 5, 6, 7, 8, 9]`,说明快速排序算法正确排序了数组。