Java 中的快速排序实现无法正确排序

问题描述 投票:0回答:1

我一直致力于在Java中实现快速排序算法,但我似乎遇到了数组排序不正确的问题。

这是我的代码:

public class QuickSort {
    
    public static void main(String[] args) {
        int[] arr = {10, 7, 8, 9, 1, 5};
        int n = arr.length;
        
        QuickSort ob = new QuickSort();
        ob.quick_Sort(arr, 0, n-1);
        
        System.out.println("Sorted array:");
        printArray(arr);
    }
    
    void quick_Sort(int[] arr, int low, int high) {
        if (low < high) {
            int pi = partition(arr, low, high);
            
            quick_Sort(arr, low, pi-1);
            quick_Sort(arr, pi+1, high);
        }
    }
    
    int partition(int[] arr, int low, int high) {
        int pivot = arr[high];
        int i = (low-1);
        
        for (int j = low; j < high; j++) {
            if (arr[j] <= pivot) {
                i++;
                
                // Swap arr[i] and arr[j]
                int temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
        
        // Swap arr[i+1] and arr[high] (or pivot)
        int temp = arr[i+1];
        arr[i+1] = arr[high];
        arr[high] = temp;
        
        return i; 
    }
    
    static void printArray(int[] arr) {
        int n = arr.length;
        for (int i = 0; i < n; i++)
            System.out.print(arr[i] + " ");
        System.out.println();
    }
}

我尝试使用不同的主元策略(第一个元素、最后一个元素、随机元素、三中位数)实现快速排序算法,并期望数组能够正确排序。但是,当前的实现不会产生预期的排序数组。

我期望数组 {10, 7, 8, 9, 1, 5} 被排序为 {1, 5, 7, 8, 9, 10}。

有人可以帮助我找出快速排序实现的问题吗?具体来说,我在分区方法上遇到了问题。

java algorithm sorting quicksort
1个回答
1
投票

您的分区方法不正确:您将枢轴放置在索引

i + 1
处,但返回
i
,调用者假定它是枢轴索引。

© www.soinside.com 2019 - 2024. All rights reserved.