簡體   English   中英

這種排序算法可以被認為是冒泡排序的一種變體嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM