1. 程式人生 > 其它 >冒泡與選擇

冒泡與選擇

# 氣泡排序
# 1,比較相鄰元素,前一個比換一個大(小)調換位置
# 2,針對出來的最後一個元素重複上面步驟
def bubble_sort(array):
b=len(array) #該列表有多長(需要知道長度好迴圈)
for i in range(1, b): #迴圈列表,表示是第幾次比較
for j in range(0, b - i): #j表示下標,因為沒迴圈一次就有一個被確定,就少一個,所有減i
if array[j] > array[j + 1]: #如果前面一個數大於後面一個數
array[j], array[j + 1] = array[j + 1], array[j] #將兩個數交換位子
return array
if __name__ == '__main__':
array = [10, 17, 50, 7, 30, 24, 27, 45, 15, 5, 36, 21]
print(bubble_sort(array))

# i 表示第幾輪“冒泡”,j 表示“走訪”到的元素索引。每一輪“冒泡”中,j 需要從列表開頭“走訪”到 len(array) - i 的位置。


# 選擇排序
# 1,從待排序列表中找到最小的元素(升序排列,降序排列則找最大的元素),存放到列表的起始位置,作為已排序的序列。
# 2. 繼續從未排序序列中找到最小的元素,存放到已排序序列的末尾(同時也是未排序序列的起始位置)。
# 3. 重複第2步,直到所有元素都已經存放到了已排序序列,則列表排序完成
def selection_sort(array):
for i in range(len(array) - 1):
min_index = i
for j in range(i + 1, len(array)):
if array[j] < array[min_index]:
min_index = j
if min_index != i:
array[i], array[min_index] = array[min_index], array[i]
return array
if __name__ == '__main__':
array = [10, 17, 50, 7, 30, 24, 27, 45, 15, 5, 36, 21]
print(selection_sort(array))
# i 表示第幾輪排序,j 表示走訪未排序序列中元素的索引,將走訪到的每一個元素與未排序序列的第一個元素進行比較
# min_index 用於標記當前這一輪排序中最小元素的索引,如果走訪到 j 索引的元素比 min_index 索引的元素小,
# 則將 j 賦值給 min_index,j 繼續走訪。走訪完所有元素後,將 min_index 索引的元素交換到 i 索引的位置(未排序序列的起始位置)。