欢迎访问宙启技术站
智能推送

使用Java实现快速排序算法的示例函数

发布时间:2023-05-22 11:25:24

快速排序是一种常用的排序算法,其时间复杂度为O(nlogn),比较适合处理大规模数据。它的核心思想是通过分治的方式,将一个大的序列分成两个子序列,通过递归的方式,不断缩小子序列的范围,最终实现排序。

以下是使用Java实现快速排序算法的示例函数:

public static 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); // 对右半部分进行排序
    }
}

public static int partition(int[] arr, int left, int right) {
    int pivot = arr[left];  // 取      个元素作为枢轴
    int i = left;
    int j = right;
    while (i < j) {
        while (i < j && arr[j] >= pivot) { // 从右往左找      个 小于 pivot 的元素
            j--;
        }
        if (i < j) { // 将找到的元素交换到左边
            arr[i] = arr[j];
            i++;
        }
        
        while (i < j && arr[i] < pivot) {  // 从左往右找      个 大于等于 pivot 的元素
            i++;
        }
        if (i < j) { // 将找到的元素交换到右边
            arr[j] = arr[i];
            j--;
        }
    }
    arr[i] = pivot; // 将枢轴元素放到最终位置
    return i;
}

函数中有两个方法,quickSort方法是递归实现的快速排序,partition方法是排序的核心过程,其中pivot是枢轴元素,根据这个元素进行划分。

在代码中,先取left位置的元素作为枢轴,然后从right位置一直向左找到 个小于pivot的元素,将其交换到left位置。接着从left位置一直向右找到 个大于等于pivot的元素,将其交换到刚才的右边,如此往复,直到i==j,这时i的位置就是pivot元素的最终位置。

最后,将数组切分成两部分,对左半部分和右半部分分别进行递归排序,直到左右两部分有序后,整个数组也就有序了。

上述实现中的时间复杂度为O(nlogn),空间复杂度为O(logn)。