使用Java实现一个快速排序
时间: 2024-05-05 14:16:23 浏览: 5
快速排序是一种常用的排序算法,可以在O(nlogn)的时间复杂度内将一个数组排序。下面是使用Java实现快速排序的代码:
```
public class QuickSort {
public static void quickSort(int[] arr) {
if (arr == null || arr.length == 0) {
return;
}
int low = 0, high = arr.length - 1;
quickSort(arr, low, high);
}
private static void quickSort(int[] arr, int low, int high) {
if (low >= high) {
return;
}
int pivotIndex = partition(arr, low, high);
quickSort(arr, low, pivotIndex - 1);
quickSort(arr, pivotIndex + 1, high);
}
private static int partition(int[] arr, int low, int high) {
int pivot = arr[low];
int left = low + 1, right = high;
while (left <= right) {
while (left <= right && arr[left] < pivot) {
left++;
}
while (left <= right && arr[right] > pivot) {
right--;
}
if (left <= right) {
int temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
left++;
right--;
}
}
arr[low] = arr[right];
arr[right] = pivot;
return right;
}
}
```
在快速排序中,我们首先选取数组的一个元素作为“基准值”,然后将数组分成两部分,一部分是小于基准值的元素,另一部分是大于或等于基准值的元素。之后,我们对这两部分分别进行快速排序,最终得到一个有序的数组。
在上面的代码中,我们定义了三个函数,其中`quickSort`函数是对外暴露的接口,它调用了`quickSort`函数进行排序。`quickSort`函数中,我们首先判断数组是否为空或者长度为0,如果是的话就直接返回。否则,我们将数组的最低位和最高位作为参数传入`quickSort`函数中。
在`quickSort`函数中,我们首先判断最低位是否小于等于最高位,如果是的话就返回。否则,我们调用`partition`函数将数组分成两部分,并递归地对这两部分进行快速排序。
在`partition`函数中,我们选取最低位的元素作为基准值,将数组分成两部分。之后,我们使用两个指针`left`和`right`分别指向数组的最低位和最高位,然后不断地移动指针,直到找到两个元素,一个小于等于基准值,一个大于等于基准值。之后,我们交换这两个元素的位置,并继续移动指针。当`left`和`right`指针相遇时,我们将基准值和`right`所指的元素进行交换,并返回`right`的位置作为分割点。
最后,我们可以使用以下代码来测试上面的快速排序实现:
```
public static void main(String[] args) {
int[] arr = {5, 3, 8, 4, 2, 7, 1, 10, 6, 9};
QuickSort.quickSort(arr);
System.out.println(Arrays.toString(arr));
}
```
运行结果为:`[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]`。