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
  • 相关阅读:
    tinymce富文本的实践(vue)
    package.json 版本号说明
    Java注解代码生成
    swagger注释API :@ApiModel ....
    Vue的生命周期函数和beforeRouteEnter()/beforeRouteLeave()函数
    各类程序员学习路线图
    mock.js的使用方法
    推荐使用rpx替代upx的公告
    DispatcherServlet解读
    学会fetch的用法
  • 原文地址:https://www.cnblogs.com/xuanlu/p/11565784.html
Copyright © 2011-2022 走看看