diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..1944ae0 Binary files /dev/null and b/.DS_Store differ diff --git a/sorting/MergesortWithoutSlicing.py b/sorting/MergesortWithoutSlicing.py new file mode 100644 index 0000000..7883024 --- /dev/null +++ b/sorting/MergesortWithoutSlicing.py @@ -0,0 +1,60 @@ + +# 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) +