算法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)

 

posted @ 2018-07-17 11:30  争-渡  阅读(123)  评论(0)    收藏  举报