Java函数如何快速排序一个数组?
发布时间:2023-06-20 01:28:51
快速排序是一种基于比较的排序方法,其核心思想是通过不断的分治和交换,将待排序数组分成两个部分,并将其中一个部分排序完成后再对另一个部分进行排序,最终将整个数组排序完成。快速排序的时间复杂度为O(nlogn)。
在Java中,我们可以使用递归来实现快速排序。具体步骤如下:
1. 选择数组中的一个数值作为枢轴pivot,将数组分成两个部分:左侧的部分所有数值都小于等于pivot,右侧部分所有数值都大于pivot。
2. 将左右两部分分别进行同样的操作,即选择一个pivot,将子数组分为两部分,继续递归直到每个子数组只有一个数值为止。
3. 对于每个子数组,需要进行交换操作,使得左侧部分的数值都小于等于右侧部分的数值。
4. 最终得到排序完成的数组。
以下是Java代码实现:
public class QuickSort {
public 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 int partition(int[] arr, int left, int right) {
// 选择pivot
int pivot = arr[left];
int i = left + 1;
int j = right;
while (i <= j) {
// 左侧所有数值都小于等于pivot
while (i <= j && arr[i] <= pivot) {
i++;
}
// 右侧所有数值都大于pivot
while (i <= j && arr[j] > pivot) {
j--;
}
// 交换i和j
if (i < j) {
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
// 交换pivot和j
int tmp = arr[left];
arr[left] = arr[j];
arr[j] = tmp;
return j;
}
}
其中,partition方法用于将数组分为左右两部分,并进行交换操作。quickSort方法用于递归调用partition方法,完成整个数组的排序。
测试代码如下:
public class TestSort {
public static void main(String[] args) {
QuickSort qs = new QuickSort();
int[] arr = {5, 7, 3, 2, 4, 1, 6};
qs.quickSort(arr, 0, arr.length - 1);
System.out.println(Arrays.toString(arr));
}
}
输出结果为:
[1, 2, 3, 4, 5, 6, 7]
说明快速排序成功排序了数组。
