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))
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
2 Answers 2
A few issues here:
You need to use
numelrather thansizeto get the number of elements in an array.sizewill give you a vector of sizes of each dimension andnumelwill give you the total number of elementsYou need to actually create an array of values for your
forloop to loop through. To do this, use the colon to create an array from2ton.for ii = 2:n endYou use
iias your looping variable but try to useiinside of the loop. Pick one and stick to it (preferably noti)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))
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
Comments
Your python version is inefficient:
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)
and your matlab code is wrong:
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
alist[i], alist[i+1] = alist[i+1], alist[i]