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
  • 相关阅读:
    外部排序分析
    C++读写CSV文件
    springMVC之annotation优化
    用Scertify Professional实现代码审查
    flash与字符串:字符串与属性
    题目描述:字符串查找
    matlab遗传算法
    开发传感器应用
    Java 高效 MVC & REST 开发框架 JessMA v3.2.1 即将发布
    基于drools创建自己的关系操作符
  • 原文地址:https://www.cnblogs.com/xuanlu/p/11565784.html
Copyright © 2011-2022 走看看