python排序(冒泡、直接选择、直接插入等)

冒泡排序

冒泡法:第一趟:相邻的两数相比,大的往下沉。最后一个元素是最大的。

           第二趟:相邻的两数相比,大的往下沉。最后一个元素不用比。

 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))
原文地址:https://www.cnblogs.com/pinpin/p/9862219.html