I was not updating the list from the recursive call. > merge_sort(left,'left') > merge_sort(right,'right')
left = merge_sort(left,'left') right = merge_sort(right,'right') -A -Abhi On Thu, Mar 22, 2012 at 1:40 PM, Abhishek Pratap <abhishek....@gmail.com> wrote: > I am imlpementing a merge sort algo for clarity purposes but my > program is giving me weird answers. Sometimes it is able to sort and > other times it does funky things. Help appreciated > > > from random import * > from numpy import * > > nums = [random.randint(100) for num in range(4)] > #nums = [3,7,2,10] > > def merge_sort(nums, message='None'): > #print "%s : num of elements in the list %d" % (message,len(nums)) > print '[merge_sort] %s : %s' % ( message, nums) > > if len(nums) <= 1: > return nums > > middle = len(nums)/2 > print '[merge_sort] Mid point is %d' % middle > left = nums[:middle] > right = nums[middle:] > > merge_sort(left,'left') > merge_sort(right,'right') > print '[merge_sort] Calling merge on left: %s right : %s' % (left,right) > result = merge(left,right) > print '[merge_sort] %s' % result > return result > > > def merge(left,right): > result = [] > i,j = 0,0 > > print '[merge] left %s, right %s' % (left, right) > > while i < len(left) and j < len(right): > print '[merge]Comparing left %d to right %d' % (left[i],right[j]) > if left[i] <= right[j]: > result.append(left[i]) > i += 1 > else: > result.append(right[j]) > j += 1 > > print '[merge]pushing to result',result > > result.extend(left[i:]) > result.extend(right[j:]) > print '[merge] return',result > return result > > > merge_sort(nums,'start') _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor