"""
归并排序思想:
(1)把数组nums[]分为左右两个数组,nums[left,mid],nums[mid+1,right]
当划分的两数组left>=right的时候,则需要合并两数组了。
(2)合并两数组,先定义一个临时数组temp,每次分别从
nums[left,mid],nums[mid+1,right]取较小的那个,然后被取的数组指针i++;
最终把临时数组的值重新赋值给合并的数组nums[]
"""
class Solution:
def mergeSort(self,arr):
self.mSort(arr,0,len(arr)-1)
def mSort(self,arr,left,right):
if left>=right:
return
mid = int((left+right)/2)
self.mSort(arr,left,mid)
self.mSort(arr,mid+1,right)
self.merge(arr,left,mid,right)
def merge(self,arr,left,mid,right):
temp = [0]*(right-left+1)
i = left
j = mid+1
k = 0
while i<=mid and j<=right:
if arr[i]<=arr[j]:
temp[k]=arr[i]
k+=1
i+=1
else:
temp[k]=arr[j]
k+=1
j+=1
while i<=mid:
temp[k]=arr[i]
k+=1
i+=1
while j<=right:
temp[k]=arr[j]
k+=1
j+=1
for i in range(len(temp)):
arr[left+i]=temp[i]
if __name__=="__main__":
so = Solution()
arr = [2,3,6,1,9]
so.mergeSort(arr)
print(arr)
归并排序
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
相关阅读更多精彩内容
- 选择排序 对于任何输入,时间为O(n*n); 冒泡排序 最优(对于升序的数组,因为加入了一个跳出判断):O(n),...
- [前言] 此文章参考自《数据结构(java版)》第三版,叶核亚 一、排序的基本概念: (1)性能评价:取决于时间复...
- 『导言』 iOS 开发使用苹果原生地图时候,需要将地球坐标转化为火星坐标。为啥呢?如何转换?分析如下: 既然是在国...