概述
题目描述:
给定一个整数数组 nums,将该数组升序排列。
示例 1:
输入:[5,2,3,1]
输出:[1,2,3,5]
示例 2:
输入:[5,1,1,2,0,0]
输出:[0,0,1,1,2,5]
提示:
1 <= A.length <= 10000
-50000 <= A[i] <= 50000
思想:
- 这道题目就是一个排序题目的练习。这里实现过程我采用的是归并排序。
- 需要注意的是边界条件,如果数组只有一个值或者是空的时候,应该如何处理。
code:
class Solution(object):
def sortArray(self, nums):
'''
归并排序:
利用递归过程。将原数组分为左右两个,
左边右边分别有序后,再分别指针从左走,然后比较左右的数
依次传进辅助数组中,直到有一侧赋值完以后,另一侧的剩下的直接拷贝
当全部完成以后,将辅助数组中的数全部拷贝原数组即可
'''
if len(nums) < 2:
return nums
return self.sortProcess(nums, 0, len(nums)-1)
def sortProcess(self, nums, L, R):
'''
归并排序中的排序功能函数
递归的时候参数不能出现常数,因为参数就是不断地变化的,如果定死了常数就不变了
'''
if L == R:
return
mid = L + ((R-L) >> 1) #相当于(L+R)//2
self.sortProcess(nums, L, mid)
self.sortProcess(nums, mid+1, R) #这块就已经做到了左右两边分别有序
return self.merge(nums, L, mid, R)
def merge(self, nums, L, mid, R):
'''
归并排序中的归并函数功能
即将两个排序好的子序列合并到一起
'''
help_length = R - L + 1
help_nums = []
for i in range(0, help_length):
help_nums.append(0)
index = 0 #辅助数组的索引
p1 = L # L和R是随着变化的,不能一直赋值为0
p2 = mid+1
while p1 <= mid and p2 <= R : #保证不越界,也就是给一个终止条件
if (nums[p1] < nums[p2]) :
help_nums[index] = nums[p1]
index += 1
p1 += 1
else :
help_nums[index] = nums[p2]
index += 1
p2 += 1
while p1 <= mid:
help_nums[index] = nums[p1]
p1 += 1
index += 1
while p2 <= R:
help_nums[index] = nums[p2]
p2 += 1
index += 1
for i in range (len(help_nums)):
nums[L+i] = help_nums[i]
return nums
最后
以上就是激情店员为你收集整理的力扣刷题(十七)--排序数组--python语言描述--sortArray的全部内容,希望文章能够帮你解决力扣刷题(十七)--排序数组--python语言描述--sortArray所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复