1. 程式人生 > >python排序(冒泡、直接選擇、直接插入等)

python排序(冒泡、直接選擇、直接插入等)

時間 lec 改進 部分 urn 最後一個元素 穩定 等於 style

冒泡排序

冒泡法:第一趟:相鄰的兩數相比,大的往下沈。最後一個元素是最大的。

第二趟:相鄰的兩數相比,大的往下沈。最後一個元素不用比。

 1 #冒泡排序
 2 array = [1,5,6,2,9,4,3]
 3 def bubble_sort(array):
 4     for i in range(len(array)-1):
 5         for j in range(len(array)-i-1):
 6             if array[j] > array[j+1]:
 7                 array[j],array[j+1] = array[j+1],array[j]
8 return array 9 10 bubble = bubble_sort(array) 11 print(bubble)

時間復雜度:O(n^2)

穩定性:穩定

改進:如果一趟比較沒有發生位置變換,則認為排序完成

 1 array = [1,2,3,5,7]
 2 def bubble_sort(array):
 3     for i in range(len(array)-1):
 4         flag = 1   #建立標誌位
 5         for j in range(len(array)-i-1):
 6             if
array[j] > array[j+1]: 7 array[j],array[j+1] = array[j+1],array[j] 8 flag = 0 9 if not flag: 10 break 11 return array 12 13 bubble = bubble_sort(array) 14 print(bubble)

直接選擇排序

選擇排序法:每一次從待排序的數據元素中選出最小(或最大)的一個元素,存放到序列的起始位置,直到全部排完。

 1 def select_sort(array):
 2     for i in range(len(array)-1):
 3         min = i
 4         for j in range(i+1, len(array)):
 5             if array[j] < array[min]:
 6                 min = j
 7         array[i], array[min] = array[min], array[i]
 8     return array
 9 
10 array = [1,5,6,2,9,4,3]
11 select = select_sort(array)
12 print(select) 

直接插入排序

列表被分為有序區和無序區兩個部分。最初有序區只有一個元素。
每次從無序區選擇一個元素,插入到有序區的位置,直到無序區變空。
其實就相當於摸牌:

 1 def insert_sort(array):
 2     # 循環的是第二個到最後(待摸的牌)
 3     for i in range(1, len(array)):
 4         # 待插入的數(摸上來的牌)
 5         min = array[i]
 6         # 已排好序的最右邊一個元素(手裏的牌的最右邊)
 7         j = i - 1
 8         # 一只和排好的牌比較,排好的牌的牌的索引必須大於等於0
 9         # 比較過程中,如果手裏的比摸上來的大,
10         while j >= 0 and array[j] < min:
11             # 那麽手裏的牌往右邊移動一位,就是把j付給j+1
12             array[j+1] = array[j]
13             # 換完以後在和下一張比較
14             j -= 1
15         # 找到了手裏的牌比摸上來的牌小或等於的時候,就把摸上來的放到它右邊
16         else:array[j+1] = min
17     return array
18 
19 list=[5,6,1,2,8,3,4]
20 print(insert_sort(list))

python排序(冒泡、直接選擇、直接插入等)