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

Java函数-快速排序算法的实现方法

发布时间:2023-06-30 20:58:04

快速排序是一种常见的排序算法,它使用分治法(Divide and Conquer)的思想来将一个大问题分解为多个小问题,并逐步解决这些小问题,最终达到整体解决的效果。

快速排序的基本思想是选取一个基准元素(通常是列表的 个元素),将列表分成两部分,使得小于基准元素的元素位于基准元素的左边,大于基准元素的元素位于基准元素的右边。然后递归地对左右两部分进行排序,直到整个列表有序。

以下是快速排序的Java实现方法:

public class QuickSort {
    public static void quickSort(int[] arr, int low, int high) {
        if (low < high) {
            // 使用分区函数获取基准元素的索引
            int pivotIndex = partition(arr, low, high);
            
            // 递归地对左右两部分分别进行快速排序
            quickSort(arr, low, pivotIndex - 1);
            quickSort(arr, pivotIndex + 1, high);
        }
    }
    
    public static int partition(int[] arr, int low, int high) {
        // 选取      个元素作为基准元素
        int pivot = arr[low];
        
        while (low < high) {
            // 从右向左找到      个小于基准元素的元素
            while (low < high && arr[high] >= pivot) {
                high--;
            }
            // 将找到的元素移到基准元素的左边
            arr[low] = arr[high];
            
            // 从左向右找到      个大于基准元素的元素
            while (low < high && arr[low] <= pivot) {
                low++;
            }
            // 将找到的元素移到基准元素的右边
            arr[high] = arr[low];
        }
        
        // 将基准元素放到最终位置
        arr[low] = pivot;
        
        // 返回基准元素的索引
        return low;
    }
    
    public static void main(String[] args) {
        int[] arr = {5, 9, 3, 1, 8, 6, 2, 7, 4};
        
        quickSort(arr, 0, arr.length - 1);
        
        for (int num : arr) {
            System.out.print(num + " ");
        }
    }
}

以上代码中,quickSort函数是快速排序的入口函数,它接受一个整型数组 arr,以及列表的起始索引 low 和结束索引 high,表示待排序的部分列表。在 quickSort 函数中,首先判断基准元素左右两边是否还有元素需要排序,如果有,则调用 partition 函数来获取基准元素的索引,并递归地对左右两部分进行排序。

partition 函数是快速排序的核心函数,它接受一个整型数组 arr,以及列表的起始索引 low 和结束索引 high,它会选取 个元素作为基准元素,然后使用双指针的思想来将小于基准元素的元素移到左边,大于基准元素的元素移到右边,最终将基准元素放到最终位置,并返回基准元素的索引。

main 函数中,我使用一个例子来验证快速排序算法的正确性。将待排序列表初始化为 {5, 9, 3, 1, 8, 6, 2, 7, 4},然后调用 quickSort 函数对列表进行排序,并输出排序后的结果。

快速排序的时间复杂度为 O(nlogn),其中 n 是列表的长度。由于是原地排序,所以空间复杂度为 O(logn)。相对于其他排序算法,快速排序具有较好的性能。