归并排序——如何使用golang和python实现

  介绍

归并排序——如何使用golang和python实现?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

<强>归并排序

思路:将数组不断二分,然后合并为有序数组

<强> c++实现:

空白归并排序(T arr [], int, int){//对arr(左、右)的范围进行排序
  如果(左祝辞=)
  返回;
  int中期=(左+右)/2;
  归并排序(加勒比海盗,左,中期);
  归并排序(加勒比海盗,中期+ 1);
  合并(加勒比海盗,左,中,右);//合并两部分
  }
  
  template
  空白__merge (T arr [], int, int中期,int){//将arr(左,中)和arr[中期+ 1]两部分进行归并
  
  T * tmp=new T(左边/右边+ 1);
  for (int i=左;我& lt;=正确;我+ +)
  tmp arr [i -左]=[我];//先把arr(需要合并的左右片段)复制给tmp
  
  int i=左,j=中期+ 1;//我做为左半部分的指针j作为右半部分的指针
  for (int k=;k & lt;=正确;k + +) {
  如果我比;中期){//左半部分已经合入完了,将右半部分剩下的全部合入
  arr [k]=tmp [j -左);
  + +;
  }
  else if (j比;){//右半部分已经合入完了,将左半部分剩下的全部合入
  arr [k]=tmp (i -左);
  我+ +;
  }
  else if (tmp (i -左)& lt;tmp [j -左)){
  arr [k]=tmp (i -左);
  我+ +;
  }
  其他{
  arr [k]=tmp [j -左);
  + +;
  }
  }
  删除[]tmp;
  }

GoLang实现:

 func归并排序(arr int[],左,右int) {
  如果在正确={
  返回
  }
  中期:=左+(左边/右边)/2
  归并排序(加勒比海盗,左,中期)//递归调用,分别对左右部分进行归并排序
  归并排序(加勒比海盗,中期+ 1)
  合并(加勒比海盗,左,中,右)//将左右部分进行合并
  }
  
  函数合并(arr int[],左,中,右int) {//将要合并的部分做个拷贝
  var tmp int[]=使(int[],左边/右边+ 1)
  对于我来说,j:=左,0;我& lt;=正确;我+ + {
  tmp arr [j]=[我]
  j + +
  }//我做为左半部分的指针j作为右半部分的指针
  中期var i, j int=, + 1
  凯西:=;k & lt;=正确;k + + {
  如果我在中期{//左半部分已经合入完了,将右半部分剩下的全部合入
  arr [k]=tmp [j-left]
  j + +
  其他}如果j比;{//右半部分已经合入完了,将左半部分剩下的全部合入
  arr [k]=tmp[我]
  我+ +
  其他}如果tmp[我]比;tmp (j-left) {
  arr [k]=tmp [j-left]
  j + +
  其他}{
  arr [k]=tmp[我]
  我+ +
  }
  }
  }

<>强python实现:

python的实现方法和上面不一样,上面两种方法都是在原始数组上直接进行修改的

 def归并排序(arr):
  如果len (arr) & lt;=1:
  返回加勒比海盗=len (arr)/中期/2
  左=归并排序(arr[:中期])#分别对左右部分排序
  正确的=归并排序(arr[中期:])
  返回合并(左、右)#合并左右部分为有序数组
  
  
  def合并(左,右):
  结果=[]
  ,right.pop num_left num_right=left.pop(0)(0) #分别取出左右部分的第0个元素
  而真正的:
  如果num_left & lt;num_right:
  result.append (num_left)
  试一试:
  num_left=left.pop (0)
  除了IndexError:
  result.append (num_right)
  result.extend(右)
  打破
  其他:
  result.append (num_right)
  试一试:
  num_right=right.pop (0)
  除了IndexError:
  result.append (num_left)
  result.extend(左)
  打破
  返回结果
  
  
  if __name__==& # 39; __main__ # 39;:
  从随机进口洗牌
  
  arr=列表(范围(30))
  洗牌(arr)
  arr=归并排序(arr)
  打印(arr) 

关于归并排序——如何使用golang和python实现问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。

归并排序——如何使用golang和python实现