gpt4 book ai didi

python编程实现归并排序

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章python编程实现归并排序由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

因为上个星期leetcode的一道题(Median of Two Sorted Arrays)所以想仔细了解一下归并排序的实现.

还是先阐述一下排序思路:

首先归并排序使用了二分法,归根到底的思想还是分而治之。拿到一个长数组,将其不停的分为左边和右边两份,然后以此递归分下去。然后再将她们按照两个有序数组的样子合并起来。这样说起来可能很难理解,于是给出一张我画的图.

python编程实现归并排序

这里显示了归并排序的第一步,将数组按照middle进行递归拆分,最后分到最细之后再将其使用对两个有序数组进行排序的方法对其进行排序.

两个有序数组排序的方法则非常简单,同时对两个数组的第一个位置进行比大小,将小的放入一个空数组,然后被放入空数组的那个位置的指针往后 移一个,然后继续和另外一个数组的上一个位置进行比较,以此类推。到最后任何一个数组先出栈完,就将另外i一个数组里的所有元素追加到新数组后面.

由于递归拆分的时间复杂度是logN 然而,进行两个有序数组排序的方法复杂度是N该算法的时间复杂度是N*logN 所以是NlogN.

根据这波分析,我们可以看看对上图的一个行为.

当最左边的分到最细之后无法再划分左右然后开始进行合并.

第一次组合完成[4, 7]的合并 。

第二次组合完成[4, 7, 8]的合并 。

第三次组合完成[3, 5]的合并 。

第四次组合完成[3, 5, 9]的合并 。

第五次组合完成[3, 4, 5, 7, 8, 9]的合并结束排序.

下面放上python的代码 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
def merge(a, b):
  c = []
  h = j = 0
  while j < len (a) and h < len (b):
   if a[j] < b[h]:
    c.append(a[j])
    j + = 1
   else :
    c.append(b[h])
    h + = 1
 
  if j = = len (a):
   for i in b[h:]:
    c.append(i)
  else :
   for i in a[j:]:
    c.append(i)
 
  return c
 
 
def merge_sort(lists):
  if len (lists) < = 1 :
   return lists
  middle = len (lists) / 2
  left = merge_sort(lists[:middle])
  right = merge_sort(lists[middle:])
  return merge(left, right)
 
 
if __name__ = = '__main__' :
  a = [ 4 , 7 , 8 , 3 , 5 , 9 ]
  print merge_sort(a)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.

最后此篇关于python编程实现归并排序的文章就讲到这里了,如果你想了解更多关于python编程实现归并排序的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com