【问题标题】:BubbleSort with recursion in Python3 - Returning "None"在 Python 中使用递归进行冒泡排序 - 返回“无”
【发布时间】:2018-12-11 06:55:44
【问题描述】:

我创建了一个小函数来在 Python 3 中进行 BubbleSort(只是学习如何编码),但我找不到问题。

这里是代码。由于某种原因,它返回“无”。有人可以看看吗?谢谢!

arr = [1,5,2,7,3]

def bubbleSort(array):
    count = 0
    #print("array is currently",array)
    for idx in range(len(array)-1):
        if array[idx] > array[idx + 1]:
            array[idx],array[idx + 1] = array[idx + 1],array[idx]
            count += 1
            #print("swaped and count is currently",count)
            #print("array is currently",array)
    if count == 0:
        #print("Count is zero")
        #print("array is currently",array)
        return array
    else:
        #print("Count is not zero")
        bubbleSort(array)

print(bubbleSort(arr))

【问题讨论】:

  • 在你的else 中你需要return bubbleSort(array) ...我不能说其余实现的正确性
  • 递归函数在返回值的方式上与普通 Python 函数没有什么不同,所有对 bubbleSort 的递归调用都被丢弃了,因为您没有访问结果。

标签: python python-3.x bubble-sort


【解决方案1】:

需要返回排序后的数组

arr = [1,5,2,7,3]

def bubbleSort(array):
    count = 0
    #print("array is currently",array)
    for idx in range(len(array)-1):
        if array[idx] > array[idx + 1]:
            array[idx],array[idx + 1] = array[idx + 1],array[idx]
            count += 1
            #print("swaped and count is currently",count)
            #print("array is currently",array)
    if count == 0:
        #print("Count is zero")
        #print("array is currently",array)
        return array
    else:
        #print("Count is not zero")
        return bubbleSort(array)

print(bubbleSort(arr))

【讨论】:

    【解决方案2】:

    使用递归而不使用任何循环的冒泡排序,

    def bubble_sort_recur(a, i, j, n):
        if j == n:
            i = i+1
            j = 0
        if i == n:
            return 
        if a[i] > a[j]:
            temp = a[j]
            a[j] = a[i]
            a[i] = temp
            bubble_sort_recur(a, i, j+1, n);
        else:
            bubble_sort_recur(a, i, j + 1, n);
        return a
    
    a = [1, 12, 3, 4]
    a = bubble_sort_recur(a, 0, 0, len(a))
    print(a)
    

    【讨论】:

    • 按降序排列!
    【解决方案3】:

    代码行更少的最简单解决方案:

    def bubblesort(l,n):
        for i in range(len(l)-2):
            if l[i] > l[i+1]:
                l[i], l[i+1] = l[i+1], l[i]
        if n>1:        
            bubblesort(l,n-1)   
    
    l = [6,2,9,11,9,3,7,12]
    n=len(l)    
    bubblesort(l,n)
    print(l)
    

    【讨论】:

      【解决方案4】:

      我真的很喜欢@user3065757 的方法!无论如何,我的代码是

      def rec_bubble_sort(myList):
          flag = 0
          for i in range(len(myList)-1):
              if myList[i] > myList[i+1]:
                  myList[i], myList[i+1] = myList[i+1], myList[i]
                  flag = 1
          if flag:
              return rec_bubble_sort(myList[0:len(myList)-1])+myList[len(myList)-1:]
          else:
              return myList
      
      
      myList = [2, 6, 4, 0, 5, 7, 2, 4, 1]
      print(rec_bubble_sort(myList))
      

      我的代码类似于@RohithS98,但我用过

      return rec_bubble_sort(myList[0:len(myList)-1])+myList[len(myList)-1:]
      

      这背后的原因是当函数被调用时,它不会遍历整个列表。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-12-02
        • 2012-05-28
        • 1970-01-01
        • 2013-10-09
        • 2021-09-07
        • 2019-06-06
        • 1970-01-01
        • 2011-12-09
        相关资源
        最近更新 更多