晋江文学城
下一章   目录  设置

1、算法 归并排序 ...

  •   对数组进行排序,按从小到大的顺序排,归并排序算法采用递归的思想

      基础情景是对两个只有一个元素的数组进行排序,小的在前、大的在后,将两个单元素数组合并组成一个从小到大顺序的2元素数组

      然后再拿这个2元素数组A与另一个2元素数组B进行合并,两个数组同时从左到右遍历,组成四个元素的数组C,选取A和B的第一个元素里较小的那个作为C的第一个元素,较大的那个作为C的第二个元素,以此类推

      语言:python

      def Mergesort(list):
      if len(list)==1:
      return [list]//基础情境

      else:
      Combine_list=[]
      list1=Mergesort(list[0:int(len(list)/2)])
      list2=Mergesort(list[int(len(list)2):len(list)]
      i=j=0
      l_i=len(list1) l_j=len(list2)
      while(i!=l_i and j!=l_j):
      while(i 小于 l_i and j小于l_j and list1[i]大于list2[j]):
      Combine_list.append(list2[j])
      j+=1
      while(i小于l_i and j小于l_j and list1[i]小于等于list2[j]):
      Combine_list.append(list1[i])
      i+=1
      if i!=l_i:
      for x in range(i,l_i):
      Combine_list.append(list1[x])
      if j!=l_j:
      for x in range(j,l_j):
      Combine_list.append(list2[x])
      return Combine_list

      这种方法不是最优解,因为每次递归调用时都会生成一个临时的Combine_list,递归次数一多,空间开销就会很大,最优解应该是不用生成临时Combine_list也能达到效果,这个等我有时间再继续深入研究
note 作者有话说
第1章 算法

  • 本文当前霸王票全站排行,还差 颗地雷就可以前进一名。[我要投霸王票]
  • [灌溉营养液]
    • 昵称:
    • 评分: 2分|鲜花一捧 1分|一朵小花 0分|交流灌水 0分|别字捉虫 -1分|一块小砖 -2分|砖头一堆
    • 内容:
    •             注:1.评论时输入br/即可换行分段。
    •                 2.发布负分评论消耗的月石并不会给作者。
    •             查看评论规则>>