算法3(low B三人组)
冒泡排序
思路
首先,列表每两个相邻的数,如果前边的比后边的大,那么交换这两个数……
时间复杂度
时间复杂度:O(n2)
代码示例
def bubble_sort(lis): """ 冒泡排序 :param lis:无序列表 :return: 有序的从小到大的列表 """ for i in range(0, len(lis) - 1): # 可能存在列表已经排好的情况,加标记 exchange = False for j in range(0, len(lis) - 1 - i): if lis[j] > lis[j + 1]: lis[j], lis[j + 1] = lis[j + 1], lis[j] exchange = True if not exchange: return lis return lis ret = bubble_sort([1,2,3,4,5]) print(ret)
选择排序
思路
一趟遍历记录最小的数,放到第一个位置;
再一趟遍历记录剩余列表中最小的数,继续放置;
……
时间复杂度
时间复杂度:O(n2)
代码示例
def select_sort(lis): """ 插入排序 :param lis:无序列表 :return: 有序的从大到小排序 """ for i in range(len(lis) - 1): # 第i趟:有序区li[0:i]无序区li[i,n] min_loc = i for j in range(i + 1, len(lis)): if lis[min_loc] > lis[j]: min_loc = j lis[min_loc], lis[i] = lis[i], lis[min_loc] return lis li = [1, 3, 2, 4, 5, 7, 6, 8, 9, 0] ls = select_sort(li) print(ls)
插入排序
思路
列表被分为有序区和无序区两个部分。最初有序区只有一个元素。
每次从无序区选择一个元素,插入到有序区的位置,直到无序区变空。
时间复杂度
时间复杂度:O(n2)
代码示例
def insert_sort(lis): for i in range(1, len(lis)): # i既表示趟数,也表示摸到的牌的下标 tmp = lis[i] # j是i前面的数的下标 j = i - 1 while j >= 0 and tmp < lis[j]: lis[j + 1] = lis[j] j = j - 1 lis[j + 1] = tmp return lis li = [1, 3, 2, 4, 5, 7, 6, 8, 9, 0] ls = insert_sort(li) print(ls)

浙公网安备 33010602011771号