• 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
  • 相关阅读:
    mysql的统计函数(聚合函数)
    mysql中的五子查询
    mysql-蠕虫复制--快速插入数据
    mysql 外键的使用
    我的mysql入门笔记
    阿里云官方 Centos7 源码安装 LAMP环境
    xml格式数据转excel
    mysql的安装配置
    sublime中,怎么把所有的函数代码都折叠起来?
    点击文字或按钮弹出一个DIV窗口(DIV悬浮窗口)
  • 原文地址:https://www.cnblogs.com/xuanlu/p/11565784.html
Copyright © 2020-2023  润新知