Python Bubble Sort工作,但不正确?

问题描述 投票:0回答:1

我是一个相当新的python新手,并试图使我自己的气泡排序递归。在测试错误时,我把代码改成了这样。

from sys import setrecursionlimit
setrecursionlimit(10000)

def bubbleSort(arr):
  for index in range (len(arr)-1):
    if arr[index] > arr[index+1]:
      arr[index], arr[index+1] = arr[index+1], arr[index]
      return bubbleSort(arr)


array = [0, 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, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
array.reverse()

print(array)
sorted_array = bubbleSort(array)
print(array)

最初打印一个99 -0的列表,然后在排序后,反转列表,这就是这个算法的想法。我只是不知道为什么尽管我把排序后的列表分配给了一个新的变量,打印了旧的变量,它还是能打印出一个排序后的列表。除此之外,我也不明白为什么函数在完成排序后没有返回NoneType。基本上,我的算法是可行的,但我不知道为什么。谁能帮帮我?

python bubble-sort
1个回答
0
投票

只是为了帮助你理解List在Python中是如何工作的。

Python通过引用调用还是通过值调用

Python利用了一个系统,这个系统被称为 "通过对象引用调用 "或 "通过赋值调用"。在将整数、字符串或元组等参数传递给函数的情况下,传递就像按值调用一样,因为你不能改变被传递给函数的不可变对象的值。而传递可变对象可以被认为是按引用调用,因为当它们的值在函数内部被改变时,那么也会反映到函数外部。

Example 1:

# Python code to demonstrate  
# call by value 

string = "Geeks"
def test(string):
    string = "GeeksforGeeks"
    print("Inside Function:", string) 

      
# Driver's code 
test(string) 
print("Outside Function:", string)

输出-1

Inside Function: GeeksforGeeks
Outside Function: Geeks
Example 2
   
# Python code to demonstrate  
# call by reference 
def add_more(list): 
    list.append(50) 
    print("Inside Function", list) 

# Driver's code 

mylist = [10,20,30,40] 
add_more(mylist) 
print("Outside Function:", mylist) 

输出-2

Inside Function [10, 20, 30, 40, 50]
Outside Function: [10, 20, 30, 40, 50]
© www.soinside.com 2019 - 2024. All rights reserved.