氣泡排序,插入排序,選擇排序

2022-08-03 00:45:12 字數 1927 閱讀 2322

"""

遍歷陣列

交換旗幟變數 = 假 (false)

從 i = 1 到 最後乙個沒有排序過元素的指數

如果 左邊元素 > 右邊元素

交換(左邊元素,右邊元素)

交換旗幟變數 = 真(true)

"""def bubble_sort(arr):

for i in range(len(arr)):

flag = false

for j in range(len(arr)-i-1):

if arr[j] > arr[j+1]:

arr[j], arr[j+1] = arr[j+1], arr[j]

flag = true

# 如果沒有資料交換則表示已經有序,退出迴圈

if not flag:

break

return arr

"""

將第乙個元素標記為已排序

遍歷每個沒有排序過的元素

「提取」 元素 x

i = 最後排序過元素的指數 到 0 的遍歷

如果現在排序過的元素 > 提取的元素

將排序過的元素向右移一格

否則:break

插入提取的元素

"""def insert_sort(arr):

if len(arr) <= 1:

return arr

# 遍歷每個未排序元素

for i in range(1, len(arr)):

val = arr[i]

j = i - 1

while j >= 0:

if arr[j] > val:

arr[j + 1] = arr[j]

else:

break

j -= 1

arr[j + 1] = val

return arr

"""

重複(元素個數-1)次

把第乙個沒有排序過的元素設定為最小值

遍歷每個沒有排序過的元素

如果元素 < 現在的最小值

將此元素設定成為新的最小值

將最小值和第乙個沒有排序過的位置交換"""

def select_sort(arr):

for i in range(len(arr)-1):

min_idx, min_val = i, arr[i]

for j in range(i, len(arr)):

if arr[j] < min_val:

min_idx, min_val = j, arr[j]

arr[i], arr[min_idx] = arr[min_idx], arr[i]

return arr

from random import randint

arr = [randint(1,100) for i in range(10)]

%time bubble_sort(arr)

%time insert_sort(arr)

%time select_sort(arr)

cpu times: user 18 µs, sys: 1e+03 ns, total: 19 µs

wall time: 19.8 µs

cpu times: user 8 µs, sys: 0 ns, total: 8 µs

wall time: 10 µs

cpu times: user 14 µs, sys: 1 µs, total: 15 µs

wall time: 16.9 µs

[17, 17, 22, 29, 56, 61, 89, 90, 91, 97]

氣泡排序,選擇排序,插入排序

氣泡排序,選擇排序,插入排序 小規模的檔案以及基本有序的檔案,插入排序的效能比快速排序的效能更為有效一些,實際上,插入排序通常也做快速排序實現的一部分。1 氣泡排序 packagedatastrut public classbubblesort public voidinsert longvalue...

選擇排序 , 插入排序 , 氣泡排序

編寫 include void println int array,int len 列印給定長度的陣列 printf n void swap int array,int i,int j 交換陣列中兩個位置的元素 void selectionsort int array,int len o n n 對...

氣泡排序 插入排序 選擇排序

氣泡排序是每輪比較未排序部分,從第乙個元素開始找最值,比較相鄰數字,依次往後推移,最終將最值置於最右。假設有n個數,外迴圈迴圈n 1遍,內迴圈是n 1在減去當前是第幾次外迴圈。void bubble sort mytype a,int n n為陣列長度 插入排序是從第二個元素開始快取,然後向前比較,...