python排序(冒泡、直接選擇、直接插入等)
阿新 • • 發佈:2018-10-27
時間 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 ifarray[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排序(冒泡、直接選擇、直接插入等)