Java如何实现快速排序算法的函数?
快速排序算法是常用的排序算法之一,它的原理是通过选取一个基准值(pivot),将待排序序列分为左右两个部分,其中左边部分的所有元素小于等于基准值,右边部分的所有元素大于基准值。之后对左右两部分分别递归地进行快速排序,直到排序完成。
Java中实现快速排序算法的函数,可以通过以下步骤实现:
1.编写一个快速排序函数,该函数含有三个参数:待排序数组,数组的起始位置和数组的结束位置。
public static void quickSort(int[] arr, int start, int end) {
//...
}
2.在函数中选取一个基准值pivot,通常可以选择数组的最后一个元素。
int pivot = arr[end];
3.定义左右指针left和right,分别指向数组的起始位置和结束位置,并利用while循环将左右两个部分进行排序。
int left = start, right = end;
while (left < right) {
//...
}
4.在while循环中,先从左边部分找到第一个大于等于基准值的元素,再从右边部分找到第一个小于等于基准值的元素,并将它们交换位置。
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;
}
5.在循环结束后,将基准值放到正确的位置。
if (arr[left] >= pivot) {
int temp = arr[left];
arr[left] = arr[end];
arr[end] = temp;
}
else {
left++;
int temp = arr[left];
arr[left] = arr[end];
arr[end] = temp;
}
6.然后对左右两个部分递归调用quickSort函数进行排序。
quickSort(arr, start, left - 1);
quickSort(arr, left + 1, end);
完整的快速排序函数代码如下:
public static void quickSort(int[] arr, int start, int end) {
if (start >= end) {
return;
}
int pivot = arr[end];
int left = start, right = end;
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;
}
}
if (arr[left] >= pivot) {
int temp = arr[left];
arr[left] = arr[end];
arr[end] = temp;
}
else {
left++;
int temp = arr[left];
arr[left] = arr[end];
arr[end] = temp;
}
quickSort(arr, start, left - 1);
quickSort(arr, left + 1, end);
}
通过上述步骤实现的快速排序算法可以在O(nlogn)的时间复杂度内对数列进行排序。
