2009-08-25 103 views
1

在Delphi中排序數組的最佳方法是「字母數字」。Delphi數組元素字母數字排序順序?

我發現在我的應用程序的舊代碼此評論

「這個數組的元素必須按升序,字母數字 排序順序。」

如果是這樣,copuld是什麼原因?

-VAS

+0

請完善您的問題。你是問一般的排序問題(你的第一句話),還是你的申請?如果是後者,那麼應用程序對數組做什麼?也許你需要把它分成多個問題。 – Argalatyr 2009-08-25 21:57:29

+0

我在談論一般的排序問題。 – vas 2009-08-25 21:59:49

回答

5

有沒有「最好」的方式,以怎樣的數組中的元素(或爲任何事實的集合)進行排序。排序是一種人性化的特徵(事物通常不會被排序),所以我猜這個評論與你的程序期望的內容有關。

更具體地說,其他地方可能有其他代碼段,希望數組元素按字母數字排序。它可以如此簡單,只要將它顯示到已經排序的TreeView中,以便調用代碼不必先排序數組。

數組表示爲連續的內存分配,因此訪問速度很快。在內部,編譯器只是調用GetMem來詢問SizeOf(Type)*數組的大小。一般來說,排序的元素並沒有影響數組的性能或內存大小。它必須在程序邏輯中。

+0

我提到的這個通信被放在所有在代碼中使用 「字母數字字符」的數組之前 – vas 2009-08-25 21:55:36

+0

沒有什麼特別的理由,排序總是需要時間,如果某些東西會影響你的性能,特別是如果你正在排序這並不需要排序。 – 2009-08-25 22:07:12

2

不,沒有「排序的最佳方式」。這就是爲什麼你有多種排序技術的原因之一。
使用QuickSort,您甚至可以提供比較功能,確定您最終想要的順序。

+2

雖然沒有通用的最佳排序方法,但實際上QuickSort是在普通情況下(以及大多數實際情況下)對集合進行排序的通用最佳方式,並且這已經通過數學證明。還有其他的排序方法,可以提供最好的最差情況下的性能,或者是「穩定的排序」,但總的來說,快速排序實際上是最好的排序算法(除了量子計算以及所有這些) – 2009-08-25 22:11:55

+0

我的觀點與QuickSort必須提供根據您的需要在項目B之前放置項目A的規則。 – 2009-08-25 23:13:15

1

當您嘗試對數組執行二分搜索時,以某種方式排序數組非常有用。與其他方法相比,二分查找可能非常快。但是,如果排序錯誤是錯誤的,搜索將無法找到記錄。 保持數組排序的其他原因幾乎總是出於美觀的原因,以決定如何將數組發送到某個輸出。

重新排列數組的最佳方式取決於數組的長度和數據的類型。 QuickSort算法在大多數情況下會產生快速結果。當你使用字符串列表和其他列表時,Delphi在內部使用它。問題是,你真的需要分類嗎?它是否真的需要保持一個數組?

但保持數組排序的最好方法是保持它從添加到它的第一個元素進行排序!一般來說,我會在我的數組類型中編寫一個包裝,這將會保證數組的排序。 'Add'方法將搜索數組中最大的值,它小於或等於我想要添加的值。然後我在該位置之後插入新的項目。對我來說,這將是最好的解決方案。 (對於大數組,您可以再次使用二進制搜索方法來查找需要插入新記錄的位置,這比將記錄追加到最後要慢,但您永遠不必懷疑它是否已排序,因爲它是..

3

大多數情況下,數組排序以提供更快的搜索時間給定一個長度爲L的列表,我可以與中點(L DIV 2)進行比較,並快速確定是否需要查看更大的一半,或者然後遞歸地繼續使用這個模式,直到我沒有任何東西可以被分割或找到我的匹配,這就是所謂的二進制搜索,如果列表沒有排序,那麼這種類型的操作是不可用的,而是我必須檢查列表中的每個項目,直到我到達最後。