标签:最大的 insert 索引 必须 冒泡 元素 for 大于 排序
冒泡排序
冒泡法:第一趟:相邻的两数相比,大的往下沉。最后一个元素是最大的。
第二趟:相邻的两数相比,大的往下沉。最后一个元素不用比。
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))
标签:最大的 insert 索引 必须 冒泡 元素 for 大于 排序
原文地址:https://www.cnblogs.com/pinpin/p/9862219.html