簡體   English   中英

排序技術Python

[英]Sorting Technique Python

我正在嘗試創建一種排序數字列表的排序技術。 但它的作用是比較兩個數字,第一個是列表中的第一個數字,另一個數字是2 k - 1的索引。

2^k - 1 = [1,3,7, 15, 31, 63...]

例如,如果我有一個列表[1, 4, 3, 6, 2, 10, 8, 19]

這個列表的長度是8.因此程序應該在2 k - 1列表中找到一個小於8的數字,在這種情況下它將是7。

所以現在它將隨機列表(1)中的第一個數字與同一個列表中的第7個數字進行比較(19)。 如果它大於第二個數字,它將交換頭寸。

在此步驟之后,它將繼續到4之后的第7個數字,但這不存在,所以現在它應該與4之后的第3個數字進行比較,因為3是2 k -1中的下一個數字。

因此它應該將4與2進行比較並交換它們是否在正確的位置。 所以這應該繼續下去,直到我達到1 in 2 k -1,其中列表最終將被排序。

我需要幫助開始使用此代碼。

到目前為止,我已經寫了一個小代碼,使得2 k - 1列表,但就我而言。

a = []

for i in range(10):
    a.append(2**(i+1) -1)

print(a)

例:

考慮對序列V = 17,4,8,2,11,5,14,9,18,12,7,1進行排序。 跳過序列1,3,7,15,......得到r = 7作為擬合的最大值,所以看V,第一個稀疏子序列= 17,9,所以當我們傳過V時我們產生9,4,8 ,第一次交換后為2,11,5,14,17,18,12,7,1,使用后為9,4,8​​,2,1,5,14,17,18,12,7,11完全= 7。 使用a = 3(跳過序列中的下一個較小項),第一個稀疏子序列= 9,2,14,12,當應用於V時給出2,4,8,9,1,5,12,17, 18,14,7,11,其余的a = 3種類給出2,1,8,9,4,5,12,7,18,14,17,11,然后是2,1,5,9, 4,8,12,7,11,14,17,18。 最后, a = 1 ,得到1,2,4,5,7,8,9,11,12,14,17,18。

你可能想知道,鑒於最后我們做了一個沒有跳過的排序,為什么這可能比簡單地做最后一步作為開始的唯一步驟更快。 把它想象成一個貫穿整個序列的梳子 - 請注意,在前面的步驟中,我們使用課程梳子以正確的順序獲得遙遠的東西,使用逐漸更精細的梳子直到最后我們的微調處理幾乎分類序列需要很少的調整。

p = 0
x = len(V) #finding out the length of V to find indexer in a
for j in a: #for every element in a (1,3,7....)
    if x >= j: #if the length is greater than or equal to current checking value
        p = j #sets j as p 

所以找到它應該與列表中的第一個數字進行比較的距離,但是現在我需要寫一些一直保持這樣做直到距離超出范圍所以它從3切換到1然后只檢查較小的距離直到列表排序。

您實際描述的排序算法稱為Combsort 實際上,更簡單的bubblesort是combsort的一個特例,其中間隙總是1並且不會改變。

既然你堅持如何開始這個,這就是我的建議:

  1. 首先實現bubblesort算法。 邏輯更簡單,使您在編寫時更容易推理。
  2. 完成后,您就擁有了重要的算法結構,從那里只需要將間隙長度計算添加到混合中。 這意味着,使用您的特定公式計算間隙長度。 然后,您將修改循環控制索引和內部比較索引以使用計算的間隙長度。
  3. 在循環的每次迭代之后,您將間隙長度(實際上使梳子更短)減少一些縮放量。
  4. 最后一步是嘗試不同的間隙長度和公式,以了解它如何影響算法效率。

暫無
暫無

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

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