2016-08-11 82 views
1

我有下面這個Python代碼(用於冒泡排序)。下面是我將它轉換爲MATLAB代碼的嘗試。我是MATLAB新手,正在爲練習做轉換。如果我的轉換有多準確/不正確,我將不勝感激。Python到Matlab的轉換?

的Python版本:

def bubble_sort(alist): 
    return bubble_sort_helper(alist, len(alist)) 
def bubble_sort_helper(alist, n): 
    if n < 2: 
     return alist 
    for i in range(len(alist)-1): 
     if alist[i] > alist[i+1]: 
      temp = alist[i] 
      alist[i] = alist[i+1] 
      alist[i+1] = temp 
    return bubble_sort_helper(alist, n-1) 

我在MATLAB轉換的嘗試:這裏

function a = bubble_sort(alist) 
    a = bubble_sort_helper(alist, size(alist)) 
end 

function b = bubble_sort_helper(alist, n) 
    if n < 2 
     b = alist 
    end 
    for ii = size(alist) 
     if alist(1) > alist (ii+1) 
      temp = alist(ii) 
      alist(ii) = alist(ii+1) 
      alist(ii+1) = temp 
     end 
    end 
    b = bubble_sort_helper(alistn n-1) 

end 
+0

我忘記了Python代碼if語句下添加縮進。修正了編輯錯誤。 –

+2

您是否測試過是否對輸入進行排序? – Suever

+0

1)它是否按預期工作? 2)爲什麼是遞歸的? –

回答

2

的幾個問題:

  1. 您需要使用numel而非size到獲取數組中的元素數量。 size會給你每個維度的大小的矢量和numel會給你的元素

  2. 實際上你需要通過你的for循環來創造價值的一個數組的總數。爲此,請使用冒號創建一個從2n的數組。

    for ii = 2:n 
    end 
    
  3. 您使用ii作爲循環變量,但嘗試使用i環路內。選擇一個,並堅持下去(最好不要i

  4. 要翻轉值,你可以簡單地做你的任務是這樣的:

    alist([i-1, i]) = alist([i, i-1]); 
    

總之,這會給你這樣的事情:

function a = bubble_sort(alist) 
    a = bubble_sort_helper(alist, numel(alist)) 
end 

function b = bubble_sort_helper(alist, n) 
    if n < 2 
     b = alist; 
    else 
     for k = 2:n 
      if alist(k-1) > alist(k) 
       alist([k-1, k]) = alist([k, k-1]); 
      end 
     end 
     b = bubble_sort_helper(alist, n-1); 
    end 
end 
+0

這是非常豐富的,謝謝。 –

1

你的Python版本是無效的:

def bubble_sort(alist): 
    return bubble_sort_helper(alist, len(alist)) 
def bubble_sort_helper(alist, n): 
    if n < 2: 
     return alist 
    for i in range(n-1): 
     if alist[i] > alist[i+1]: 
      alist[i], alist[i+1] = alist[i+1], alist[i] 
    return bubble_sort_helper(alist, n-1) 

和您的MATLAB代碼是錯誤的:

function a = bubble_sort(alist) 
    a = bubble_sort_helper(alist, size(alist)) 
end 

function b = bubble_sort_helper(alist, n) 
    if n < 2 
     b = alist; 
    else 
     for i = 2:n 
      if alist(i-1) > alist(i) 
       temp = alist(i-1); 
       alist(i-1) = alist(i); 
       alist(i) = temp; 
      end 
     end 
     b = bubble_sort_helper(alist, n-1); 
    end 
end 
+0

哦,謝謝你提到我的低效率問題。我正在努力學習所有關於排序算法的知識,所以每一點都有所幫助。 –