用java写一个快速排序
时间: 2024-03-09 12:21:37 浏览: 15
好的,以下是使用Java实现快速排序的示例代码:
```java
public class QuickSort {
public static void main(String[] args) {
int[] arr = { 5, 2, 9, 3, 6, 1, 8, 7, 4 };
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;
int j = right;
while (i <= j) {
if (arr[i] < pivot && arr[j] > pivot) {
swap(arr, i, j);
}
if (arr[i] >= pivot) {
i++;
}
if (arr[j] <= pivot) {
j--;
}
}
swap(arr, left, j);
return j;
}
public static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
```
快速排序的基本思想是选取一个元素作为基准(一般选取第一个元素),将小于等于基准的元素移到左边,大于基准的元素移到右边,然后对左右两个子序列分别递归地进行快速排序,直到整个序列有序。
在上面的代码中,我们定义了三个方法:`quickSort`、`partition`和`swap`。
`quickSort`方法是快速排序的主体部分,它首先判断左右指针是否重合,如果重合,那么说明排序已经完成,直接返回;否则,选取基准元素并将序列按照基准元素的大小分成两个子序列,然后分别对左右两个子序列递归调用`quickSort`方法。
`partition`方法是用来选取基准元素并进行分割的,它首先选取第一个元素作为基准元素,然后定义两个指针`i`和`j`,分别指向序列的左右两端。接下来进行循环,如果`arr[i]`小于基准元素且`arr[j]`大于基准元素,那么就交换它们;如果`arr[i]`大于等于基准元素,那么就将`i`指针向右移动一位;如果`arr[j]`小于等于基准元素,那么就将`j`指针向左移动一位。循环结束后,将基准元素和`j`指针所指的元素交换,然后返回`j`指针的位置。
`swap`方法是用来交换数组中两个元素的位置的,它接受三个参数:数组`arr`和要交换的两个位置`i`和`j`,将`arr[i]`的值存入`temp`中,然后将`arr[j]`的值赋给`arr[i]`,最后将`temp`的值赋给`arr[j]`。