leetcode 912. 排序数组

数组的归并排序实质就是分治算法,归并排序主要的思想就是分治,将总体分成多个子集,然后合并子集,多数采用递归的方式。在归并培训中,需要考虑不同的编程语言,不同的取值范围。这种思路也可以用在有序数组的合并,其中,合并算法不变,只是分治过程中略微修改一下即可。其代码如下:

原题如下:

912. 排序数组
给你一个整数数组 nums,请你将该数组升序排列。
示例 1:
输入:nums = [5,2,3,1]
输出:[1,2,3,5]
示例 2:

输入:nums = [5,1,1,2,0,0]
输出:[0,0,1,1,2,5]

代码如下:
class Solution(object):
    def sortArray(self, nums):
if len(nums) <= 1:
return nums
mid = len(nums) // 2
left = self.sortArray(nums[:mid])
right = self.sortArray(nums[mid:])
return self.merge(left, right)

def merge(self, left_list, right_list):
tmp = []
i = 0
j = 0
while (i <= len(left_list) - 1) and (j <= len(right_list) - 1):
if left_list[i] <= right_list[j]:
tmp.append(left_list[i])
i += 1
else:
tmp.append(right_list[j])
j += 1

tmp += left_list[i:]
tmp += right_list[j:]
return tmp
 
  运行结果:

   

 

 

 多个有序数组的合并

 

def array_sort(array_nums):
if len(array_nums) < 2:
return [j for i in array_nums for j in i] #这个元素是二维数组,因此需要拆分
mid = int((len(array_nums) - 1) / 2)
left_list = array_sort(array_nums[: mid + 1])
right_list = array_sort(array_nums[mid+1:])
return merge(left_list, right_list)
def merge(left_list, right_list):
tmp = []
i = 0
j = 0
while (i <= len(left_list) -1) and (j <= len(right_list) - 1):
if left_list[i] <= right_list[j]:
tmp.append(left_list[i])
i += 1
else:
tmp.append(right_list[j])
j += 1

tmp += left_list[i:]
tmp += right_list[j:]
return tmp

if __name__ == "__main__":
array_nums = [[1,2,5,7,9],[2,4,6,8,10,11,34,55],[1,3,5,8,10,15]]
res2 = array_sort(array_nums)
print(res2)

 

 

posted on 2021-10-29 10:29  random_boy  阅读(34)  评论(0)    收藏  举报

导航