簡體   English   中英

Quicksort - 排序數組速度較慢?

[英]Quicksort - slower on sorted arrays?

所以我正在嘗試一些排序算法。

private static void quicksort(int[] list, int low, int high){
    int pivot = list[low + (high-low)/2];
    int i = low; 
    int j = high;
    while (i <= j) {
      while (list[i] < pivot) {
        i++;
      }
      while (list[j] > pivot) {
        j--;
      }
      if (i <= j) {
        int temp = list[i];
        list[i] = list[j];
        list[j] = temp;
        i++;
        j--;
      }
    }
    if (low < j){
        quicksort(list, low, j);
    }
    if (i < high){
        quicksort(list, i, high);
    }

}

這段代碼運行在兩個整數數組上,每個數組都有x個(比如10億)。 第一個是排序的,第二個是陣列1上的排列,其中n對是隨機選擇和切換的。

我選擇中間元素作為樞軸,所以它應該是分類情況的最佳選擇,對吧?

我正在測量算法對每個數組進行排序所花費的時間,並計算出遞歸的次數和次數。 正如預期的那樣,對於具有隨機排列的排序陣列2,這兩個值都更高。

但是:算法仍然需要更長的時間來處理排序的數組,直到我達到大量的排列。 對於n = 10000,對於未排序的數組,我得到20ms,對於排序的數組,得到20ms。 這是為什么?

到目前為止我能說的最好是你應該仔細檢查你的時間。 一般來說,這樣的分析應該是多次運行的平均值。 我根據你的代碼制作了一個測試類,得到了這些結果:

結果圖確認常識

這是使用System.nanoTime()作為我的分析工具完成的。 沒有什么花哨。

編輯: 這是我寫的分析類的鏈接 它以類似CSV的格式輸出結果,因此我可以在電子表格程序中制作圖表。

quickSort算法的最壞情況是當數組被排序或幾乎排序時。 這很可能是為什么它需要你更長的時間來排序已經排序的數組。

暫無
暫無

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

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