zoukankan      html  css  js  c++  java
  • Merge Sort

    Given an array of integers, sort the elements in the array in ascending order. The merge sort algorithm should be used to solve this problem.

    Examples

    • {1} is sorted to {1}
    • {1, 2, 3} is sorted to {1, 2, 3}
    • {3, 2, 1} is sorted to {1, 2, 3}
    • {4, 2, -3, 6, 1} is sorted to {-3, 1, 2, 4, 6}

    Corner Cases

    • What if the given array is null? In this case, we do not need to do anything.
    • What if the given array is of length zero? In this case, we do not need to do anything.

    Time Complexity: O(NlogN)

    Space Complexity: O(N) 

    class Solution(object):
      def mergeSort(self, array):
        """
        input: int[] array
        return: int[]
        """
        # write your solution here
        if array is None or len(array) <= 1:
          return array
        cp_lst = array.copy()
        self.helper(0, len(array) - 1, array, cp_lst)
        return array
      
      def helper(self, left, right, array, cp_lst):
        if left >= right:
          return
        mid = left + (right - left) // 2
        self.helper(left, mid, array, cp_lst)
        self.helper(mid + 1, right, array, cp_lst)
        self.merge(left, right, mid, array, cp_lst)
      
      def merge(self, left, right, mid, array, cp_lst):
        for i in range(left, right + 1):
          cp_lst[i] = array[i]
        left_idx = left
        right_idx = mid + 1
        index = left_idx
        while left_idx <= mid and right_idx <= right:
          if cp_lst[left_idx] <= cp_lst[right_idx]:
            array[index] = cp_lst[left_idx]
            left_idx += 1
          else:
            array[index] = cp_lst[right_idx]
            right_idx += 1 
          index += 1
        while left_idx <= mid:
          array[index] = cp_lst[left_idx]
          index += 1
          left_idx += 1
  • 相关阅读:
    php设计模式之桥接模式
    php设计模式适配器模式
    php设计模式之装饰器模式
    php设计模式之策略模式
    php设计模式之责任链模式
    Graphics.DrawString 方法
    算法7-10:拓扑排序
    一年成为Emacs高手(像神一样使用编辑器)
    动态规划0—1背包问题
    辛星解读为什么PHP须要模板
  • 原文地址:https://www.cnblogs.com/xuanlu/p/11565784.html
Copyright © 2011-2022 走看看