Java函数实现快速排序的代码示例
发布时间:2023-06-25 19:01:19
快速排序是一种经典的排序算法,它的思想是选择一个基准值,将数组分成两个部分,左边部分的值都小于基准值,右边部分的值都大于基准值,然后递归地对两个部分进行排序,最终得到一个有序的数组。
Java函数实现快速排序的代码如下所示:
public static void quickSort(int[] arr, int left, int right) {
if (left < right) {
// 选取基准值
int pivot = arr[left];
int i = left;
int j = right;
// 分治
while (i < j) {
while (i < j && arr[j] >= pivot) {
j--;
}
if (i < j) {
arr[i] = arr[j];
i++;
}
while (i < j && arr[i] < pivot) {
i++;
}
if (i < j) {
arr[j] = arr[i];
j--;
}
}
arr[i] = pivot;
// 递归调用
quickSort(arr, left, i - 1);
quickSort(arr, i + 1, right);
}
}
该方法接收一个整型数组、一个左指针和一个右指针作为参数,表示要对数组的某个区间进行排序。
首先判断左指针是否小于右指针,如果不小于,则说明这个区间已经有序,不需要再排序。
接下来选取基准值,这里我们选择最左边的元素作为基准值。然后维护两个指针 i 和 j,初始值分别为 left 和 right。
然后从右往左寻找 个小于基准值的元素,将它移动到左端,即将 arr[j] 赋值给 arr[i],然后 i 加 1,表示 i 所指向的元素已经处理完了。
接着从左往右寻找 个大于等于基准值的元素,将它移动到右端,即将 arr[i] 赋值给 arr[j],然后 j 减 1,表示 j 所指向的元素已经处理完了。
重复上述操作,直到 i 和 j 相遇,将基准值放到它应该在的位置。
接下来递归调用 quickSort 方法对左右部分进行排序。
最终得到一个有序的数组。
快速排序算法的时间复杂度为 O(nlogn),它是一个非常高效的排序算法,被广泛应用于各种场景中。
