[building block] merge sort @ Python

Here is the basic algorithm about merge sort:

def merge(s1,s2,s):
    i=j=0
    while i + j < len(s):
        if j == len(s2) or (i < len(s1) and s1[i] < s2[j]):
            s[i + j] = s1[i]
            i += 1
        else:
            s[i + j] = s2[j]    
            j += 1
           
def merge_sort(s):
    """ Sort the elements of python list s using merge-sort algorithm"""
    # Time compelxity: O(nlogn), where n = len(s)
    n = len(s)
    if n < 2:
        return
    # Divide
    mid = n // 2
    s1 = s[:mid]
    s2 = s[mid:]    
    
    #conquer (with recursion)
    merge_sort(s1)
    merge_sort(s2)
    
    # merge results
    merge(s1,s2,s)
        

 

insertion sort: time complexity: O(n^2)

def insertion_sort(A):
    ”””Sort list of comparable elements into nondecreasing order.”””
    for k in range(1, len(A)): # from 1 to n-1
        cur = A[k] # current element to be inserted
        j = k # find correct index j for current
        while j > 0 and A[j-1] > cur: # element A[j-1] must be after current
            A[j] = A[j-1]
            j -= 1
        A[j] = cur # cur is now in the right place

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。