"""
遍歷陣列
交換旗幟變數 = 假 (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為陣列長度 插入排序是從第二個元素開始快取,然後向前比較,...