簡體   English   中英

根據結果​​確定排序算法

[英]Determine sorting algorithm from results

我現在正在修改排序算法。 這是問題:

假定此排序算法是用C編寫的,並且將'a'和'A'視為相等,並且運行此排序算法后,結果如下:

10000個隨機數據-> 0.016秒
100000隨機數據-> 0.304秒

10000個有序數據-> 0.006秒
100000個有序數據-> 0.108秒

10000個反向數據-> 0.010秒
100000個反向數據-> 0.138秒

問題:以點的形式簡要說明您可以從上述測試結果中得出的結論。

我做了什么
我知道這種排序算法是不穩定的 (如問題中所述),我可以猜測它是一種快速排序。 我知道快速排序具有最壞情況O(n ^ 2) ,平均情況和最佳情況O(n log n) ,但是我不知道如何從結果中進行解釋,我不能只說哦,因為它不-穩定和快速排序的順序相反,結果不好,因此我可以確定它是快速排序的。

我可以從結果中看出什么具體信息嗎? 如果結果中包含數學計算或其他重要觀察結果,那將是很好的。

我們可以說這不是像選擇排序或插入排序這樣的二次時間算法,因為將輸入大小增加10倍將運行時間增加13-19倍。 這是我們期望的O(n*log(n))平均情況算法的行為,例如mergesort或良好的quicksort。

我們可以說該算法不是自適應的,或者至少不是很自適應的。 自適應算法在分類的輸入上可能執行得更好,並且在反向輸入上也可能執行得更好。 特別是,將排序的輸入的大小增加10倍將使運行時間增加大約10倍。雖然該算法在排序或反向排序的輸入上比隨機輸入做得更好,但看起來更像是結果在這些情況下更有效的分支預測。

我們沒有任何信息可以表明排序是否穩定。

我看不出有什么可以區分這是快速排序,合並排序,堆排序還是其他O(n*log(n))算法。 我們可以排除某些類型的樞軸選擇來進行快速排序-例如,由於樞軸將在排序后的輸入上以二次時間運行,因此快速排序始終選擇第一個元素,但我無法分辨。

暫無
暫無

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

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