the_martian the_martian - 6 months ago 45
Python Question

Python to Matlab Conversion?

I have this python code here below (for bubble sort). Below that is my attempt at converting it to MATLAB code. I'm new to MATLAB, and I'm doing the conversion for practice. I would appreciate feedback on how accurate/incorrect my conversion is.

The 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)

My attempt at a MATLAB conversion:

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

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



A few issues here:

  1. You need to use numel rather than size to get the number of elements in an array. size will give you a vector of sizes of each dimension and numel will give you the total number of elements

  2. You need to actually create an array of values for your for loop to loop through. To do this, use the colon to create an array from 2 to n.

    for ii = 2:n
  3. You use ii as your looping variable but try to use i inside of the loop. Pick one and stick to it (preferably not i)

  4. To flip the values you can simply do your assignment like this:

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

Taken together, this will give you something like this:

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

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