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
  • 相关阅读:
    vue day6 分页显示
    vue day5 分页控件
    vue day4 table
    c# excel xlsx 保存
    diff算法
    Web Workers
    多线程
    Http请求优化
    高效编写代码
    渲染引擎
  • 原文地址:https://www.cnblogs.com/xuanlu/p/11565784.html
Copyright © 2011-2022 走看看