2016-08-11 6 views
1

Ich habe diesen Python-Code hier unten (für Bubble-Sort). Darunter ist mein Versuch, es in MATLAB-Code umzuwandeln. Ich bin neu bei MATLAB und mache die Konvertierung für die Praxis. Ich würde mich freuen Feedback darüber, wie genau/falsch meine Konvertierung ist.Python zu Matlab Conversion?

Die Python-Version:

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) 

Mein Versuch einer MATLAB-Konvertierung:

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

Ich habe vergessen, den Einzug unter die if-Anweisung für den Python-Code hinzuzufügen. Behebt das mit einer Bearbeitung, mein Fehler. –

+2

Haben Sie getestet, ob Ihre Eingaben sortiert wurden? – Suever

+0

1) Funktioniert es wie erwartet? 2) Warum ist es rekursiv? –

Antwort

2

Einige Probleme hier:

  1. Sie müssen numel verwenden, anstatt size zu Holen Sie sich die Anzahl der Elemente in einem Array. size geben Ihnen einen Vektor der Größen jeder Dimension und numel geben Sie die Gesamtzahl der Elemente

  2. Sie tatsächlich benötigen, um ein Array von Werten für Ihre for-Schleife durch zu erstellen. Verwenden Sie dazu den Doppelpunkt, um ein Array von 2 bis n zu erstellen.

    for ii = 2:n 
    end 
    
  3. Sie verwenden ii als Looping Variable, sondern versuchen, i innerhalb der Schleife zu verwenden. Wählen Sie eine und dabei zu bleiben (vorzugsweise nicht i)

  4. Um die Werte Flip Sie können einfach tun, um Ihre Zuordnung wie folgt aus:

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

Zusammengefasst dies wird Ihnen etwas wie folgt aus:

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

Dies ist sehr informativ, danke. –

1

Ihre python-Version ist ineffizient:

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) 

und Ihre MATLAB-Code ist falsch:

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

Ohh, danke für den Tipp über meine Ineffizienz. Ich versuche, alles über Sortieralgorithmen zu lernen, also hilft jedes Bit. –