# coding: utf-8 # In[1]: #Merge Slot Without Slicing #start is the index of the first item #end is the index past the the last item def indexMergeSort(alist, start = None, end = None): if start == None: start = 0 if end == None: end = len(alist) #note that the print operations still use slicing for convenience #print("Input: ",alist[start:end]) length = end - start if length > 1: #print("Splitting ",alist[start:end]) mid = start + length//2 indexMergeSort(alist, start, mid) indexMergeSort(alist, mid, end) i=start # index for the left part of the list j=mid # index for the right part of the list #we use a temporary list templist = [None] * (length) k = 0 #index for the temp list while i < mid and j < end: if alist[i] < alist[j]: templist[k] = alist[i] i=i+1 else: #we swap templist[k] = alist[j] j=j+1 k=k+1 while i < mid: templist[k] = alist[i] i=i+1 k=k+1 while j < end: templist[k]=alist[j] j=j+1 k=k+1 #we copy the results for k in range(length): alist[start+k] = templist[k] #print("Merging ",alist[start:mid], alist[mid:end]) alist = [54,26,93,17,77,31,44,55,20] indexMergeSort(alist) print(alist)