Java实现快排算法的函数
发布时间:2023-06-21 06:59:43
快速排序(Quick Sort)是一种常见的排序算法,通过将待排序的数列划分成较小和较大的两个子序列,其中较小的子序列的所有元素都比较大的子序列要小,然后递归排序两个子序列。
以下是Java实现快排算法的函数及其解释:
public static void quickSort(int[] arr, int start, int end) {
if (start < end) {
int partitionIndex = partition(arr, start, end);
quickSort(arr, start, partitionIndex - 1);
quickSort(arr, partitionIndex + 1, end);
}
}
private static int partition(int[] arr, int start, int end) {
int pivot = arr[end]; // 将数组的最后一个元素设为基准数
int i = start - 1;
for (int j = start; j < end; j++) {
if (arr[j] < pivot) {
i++;
swap(arr, i, j); // 交换元素
}
}
swap(arr, i + 1, end);
return i + 1;
}
private static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
首先,我们定义了一个公共的静态函数quickSort,它的作用是对传入的数组进行快速排序。它有三个参数:排序的数组arr,排序的起始点start,排序的结束点end。这个函数会递归的调用自己,把数组不断的分割成子数组来进行排序。
在quickSort函数中,我们首先判断是否需要进行排序,如果起始点start小于结束点end,就可以进行排序。接下来我们调用partition函数,返回的是分割后主元(pivot)的下标,然后分别对左右两个子数组调用递归,进行快速排序。
接着我们来看partition函数,它的作用是将数组分割成两个部分,然后返回主元的下标。在这个函数中,我们设定数组的最后一个元素作为主元pivot,初始状态下,我们将i设定为起始下标start-1。然后我们用循环对数组进行遍历,如果某一元素小于主元pivot,就将i与j下标的元素进行交换。最后,我们再将主元pivot与数组中下标为i+1的元素进行交换,这样分割后,数组就被分成了两个部分。
最后,我们定义了一个私有的交换函数swap,用来交换数组中两个元素的位置。
通过以上的Java代码,我们可以了解Java实现快速排序的基本流程和算法思想,这个算法具有时间复杂度为O(nlogn),是相对传统冒泡排序和插入排序算法来说,更加高效和有效的一种排序算法。
