簡體   English   中英

在以下情況下,哪種排序算法是最好的?

[英]Which sorting algorithm is the best in these following cases?

因此,在講座中我們已經討論了選擇,插入,冒泡,合並,快速,堆和基數排序。 因此,現在我應該確定以下情況下的最佳算法,並說明為什么選擇這種算法。

1) 對一組可比較元素進行排序 :我說堆/合並排序,因為它們在所有情況下都具有O(n logn)時間復雜度。 還是快速排序?

2) 排序一組32位數字的元素 :也許是基數排序,但我不確定。

3) 在排列昂貴且比較不復雜的條件下對一組可比較元素進行排序 :我的猜測是選擇排序,因為您確實有很多比較,但只有(n-1)個運動。

4) 在您知道第一個(nm)元素已經被排序而只有最后m個元素沒有被排序的條件下,對一組可比較元素進行排序。 是否存在O(m log n)或O(n log m)進程? :由於這個https://www.toptal.com/developers/sorting-algorithms/ ,我會說插入排序,但是我對其余的問題一無所知。

5) 在一個特定的期限內需要解決方案的情況下,對一組可比較的元素進行排序,該期限在將來少於n ^ 2個操作 :因為快速排序的最壞情況是n ^ 2,所以我會選擇合並或堆分類。

6) 對一組可比較的元素進行排序,但是過程應該是穩定的 :必須合並合並,因為所有其他算法都不穩定。

好吧,幾乎沒有錯誤的問題。

第一:對一組可比較的對象進行排序:如果我沒有記錯,那么每個對象都是可比較的。 可以對場外字符串進行排序而無需共同映射,但這是一種特殊情況。

我將選擇隨機排序的快速排序以避免最壞的情況。 在Mergesort和QuickSort上嘗試加倍比率測試,您會注意到,隨着合並排序的增加,速度會變慢。 但是,可以通過在遞歸調用中使用插入排序來改進Mergesort。

2:這與排序字符串相同,並且完全取決於您要如何對其進行排序? 應該按第一位,最后一位還是全部位排序? 因此,有許多針對它們的算法: MSDLSDQuick-3wayString sorts

4: 在您知道第一個(nm)元素已經被排序而只有最后m個元素沒有被排序的條件下,對一組可比較元素進行排序。 是否存在O(m log n)或O(n log m)進程:您是否可以在Merge-sort的基本情況下使用插入排序, 以便它始終將數組分為兩半(nm)和(m + 1-n)? 由於插入排序將打破這循環使得只有n個比較,另一半將由NlogN歸並排序后,你會得到上限為NlogN。

5:在一個特定的期限內需要解決方案的情況下,對一組可比較的元素進行排序,該期限在將來少於n ^ 2個操作:我也將選擇Mergesort,但是如果允許我對算法進行更改,那么我將結合使用隨機排序的快速排序(請注意:仍有機會獲得n ^ 2的時間復雜度)。

6:是的,如果您必須從這些算法中進行選擇,那么Mergesort是唯一的算法。

暫無
暫無

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

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