帮我写一个快排用java
时间: 2023-11-28 20:50:56 浏览: 50
并行计算块排java实现
好的,以下是一个基本的快排算法的Java实现:
```java
public static void quickSort(int[] arr, int left, int right) {
if (left < right) {
int pivotIndex = partition(arr, left, right);
quickSort(arr, left, pivotIndex - 1);
quickSort(arr, pivotIndex + 1, right);
}
}
private static int partition(int[] arr, int left, int right) {
int pivot = arr[right];
int i = left - 1;
for (int j = left; j < right; j++) {
if (arr[j] <= pivot) {
i++;
swap(arr, i, j);
}
}
swap(arr, i + 1, right);
return i + 1;
}
private static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
```
在这个实现中,我们定义了一个快速排序方法 `quickSort`,它接受待排序数组 `arr`、左边界 `left` 和右边界 `right` 作为参数。如果左边界小于右边界,则进行以下操作:
1. 调用 `partition` 方法将数组分成比枢轴大和比枢轴小的两部分。
2. 对于枢轴左边的部分,递归调用 `quickSort` 方法。
3. 对于枢轴右边的部分,递归调用 `quickSort` 方法。
`partition` 方法接受待排序数组 `arr`、左边界 `left` 和右边界 `right` 作为参数,并返回枢轴的位置。在该方法中,我们定义枢轴为数组最右边的元素,然后用双指针方法遍历数组,将小于等于枢轴的元素移动到左边,大于枢轴的元素移动到右边。最后,将枢轴与左边部分的最后一个元素交换位置,并返回枢轴位置。
`swap` 方法接受待交换数组 `arr` 和两个索引 `i` 和 `j` 作为参数,并交换这两个索引对应的元素。
使用示例:
```java
int[] arr = {5, 2, 9, 4, 7, 6, 1, 3, 8};
quickSort(arr, 0, arr.length - 1);
System.out.println(Arrays.toString(arr));
```
输出结果:
```
[1, 2, 3, 4, 5, 6, 7, 8, 9]
```
阅读全文