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

使用Java函数编写快速排序算法

发布时间:2023-07-02 07:50:06

快速排序是一种常用的排序算法,它的基本思想是通过一趟排序将待排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据小,然后再按此方法对两部分数据分别进行快速排序,整个过程以递归方式进行,以达到整个数据变成有序序列。

下面是使用Java函数编写快速排序算法的示例代码:

public class QuickSort {
    
    public static void main(String[] args) {
        // 待排序数组
        int[] arr = {5, 2, 8, 9, 1, 3};
        
        quickSort(arr, 0, arr.length - 1);
        
        // 打印排序结果
        for (int i : arr) {
            System.out.print(i + " ");
        }
    }
    
    // 快速排序函数
    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[right];
        // 定义划分点的位置,默认是左边界
        int partitionIndex = left;
        
        for (int i = left; i < right; i++) {
            // 如果元素小于等于基准元素,则将该元素放到划分点的位置,并将划分点向右移动
            if (arr[i] <= pivot) {
                swap(arr, i, partitionIndex);
                partitionIndex++;
            }
        }
        
        // 将基准元素放到划分点的位置
        swap(arr, partitionIndex, right);
        
        // 返回基准元素的位置
        return partitionIndex;
    }
    
    // 交换数组中两个元素的位置
    public static void swap(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
}

快速排序的时间复杂度为 O(nlogn)。这个函数编写的快速排序算法可以直接运行,并按照升序排序打印出结果:1 2 3 5 8 9。

值得注意的是,快速排序算法是一种不稳定的排序算法,即相等的元素在排序后位置可能发生变化。在实际应用中,可以对快速排序进行各种优化,使其适应不同规模的数据和特定的应用场景。