[英]can this sorting algorithm be considered as a variation of bubble sort?
這種方法可以被認為是冒泡排序的變體嗎? 如果不是,那么主要區別是什么,這種方法與冒泡排序之間的效率比較是什么?
def bubble_sort(arr):
for i in range(len(arr)):
for j in range(len(arr)-i):
if arr[i] > arr[j+i]:
arr[i], arr[j+i] = arr[j+i], arr[i]
return arr
if __name__ == '__main__':
arr = [21,4,1,3,9,20,25,6,21,14]
print(bubble_sort(arr))
輸出:[1, 3, 4, 6, 9, 14, 20, 21, 21, 25]
您的代碼實現了算法選擇排序而不是冒泡排序。 盡管它們有些相似:它們都基於元素交換。
對於選擇排序,算法的關鍵是找到最小或最大元素並最后交換:
該算法通過在未排序的子列表中找到最小(或最大,取決於排序順序)元素,將其與最左邊的未排序元素(按排序順序排列)交換(交換),並將子列表邊界向右移動一個元素來繼續進行.
並且可以改進您的代碼以避免不必要的交換:
import random
def my_sort(arr):
for i in range(len(arr)):
min_idx = i
for j in range(len(arr)-i):
if arr[min_idx] > arr[j+i]:
min_idx = j + i
arr[i],arr[min_idx] = arr[min_idx], arr[i]
return arr
if __name__ == '__main__':
for i in range(360):
i = i + 1
r = random.choices(range(i * 10), k=i) # Get list of numbers
r1 = r.copy()
assert my_sort(r) == sorted(r1)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.