簡體   English   中英

使用quickSort(JAVA)對數組進行排序

[英]Sorting arrays with quickSort (JAVA)

好的,因此我需要使用快速排序對數組進行升序和降序排序。 我的代碼在升序中正常工作,在大多數情況下都可以正常工作,但對於下降而言,它卻隨機地不能正常工作……通常在最小的數字位於原始第一個位置時才有效。 所以我可能會有一個數組(261,940,604,655),這意味着它應該輸出為(940,655,604,261),但是我得到的是(655,940,604,261)。 但是,我無法弄清楚為什么數組不總是正確排序。 有什么提示嗎?

private void sortButtonActionPerformed(java.awt.event.ActionEvent evt) {  
            // just how the array is filled
        for (int i =0; i<numNum; i++)
        {
             numList [4] = generator.nextInt(1000);
        }
            // call on quickSort "decending" method
        QuickSort_HighLow(numList, 0, numList.length - 1);
        for( int x=0; x <= numList.length-1; x++)
        {
            sortedOutput.setText((sortedOutput.getText())+ "\n" + numList[x] );
        }
}
public static int PartitionHighLow(int[] numbers, int left, int right)
{
    int pivot = numbers[left];
    while (true)
    {
        while (numbers[left] > pivot)
            left ++ ;

        while (numbers[right] < pivot)
            right --;

            if (left < right)
            {
                int temp = numbers[left];
                numbers[left] = numbers[right];
                numbers[right] = temp;
            }
            else
            {
                return right;
            }
    }
}

   public static void QuickSort_HighLow(int[] arr, int left, int right)
{
    // For Recusrion
    if(left < right)
    {
        int pivot = PartitionHighLow(arr, left, right);

        if(pivot < 1)
            QuickSort_HighLow(arr, left, pivot );

        if(pivot + 1 < right)
            QuickSort_HighLow(arr, pivot + 1, right);
    }
}

該實現存在的一個問題是,如果您擁有相同的數字,它將無法正常工作(如果將其選擇為樞軸,則將不斷切換它們)。

另一個在遞歸中:

if(pivot > left + 1)
    QuickSort_HighLow(arr, left, pivot - 1);

if(pivot < right - 1)
    QuickSort_HighLow(arr, pivot + 1, right);

您的分區函數只會執行一次,如果最小的是第一個,它將停止進行desc。 您將其分配為樞軸,將其移動到最后,計算left == right,返回length-1並終止。 這似乎是Quicksort的錯誤實現

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM