zoukankan      html  css  js  c++  java
  • [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
  • 相关阅读:
    工厂模式一
    面向对象的简单理解二
    工厂模式三
    线程的简单学习
    nyoj35 表达式求值
    nyoj305 表达式求值
    poj1298 The Hardest Problem Ever
    poj1363 Rails
    hdu2036 改革春风吹满地
    nyoj467 中缀式变后缀式
  • 原文地址:https://www.cnblogs.com/asrman/p/3978677.html
Copyright © 2011-2022 走看看