冒泡排序&选择排序&插入排序

目录

冒泡排序

冒泡排序(最好是O(n), 最坏O(n2))

原理:

拿自己与上面一个比较,如果上面一个比自己小就将自己和上面一个调换位置,依次再与上面一个比较,第一轮结束后最上面那个一定是最大的数

时间复杂度:O(n²)
空间复杂度:O(1)
稳定性:稳定

冒泡排序代码

def bubble_sort(blist):
    count = len(blist)
    for i in range(0, count):
        for j in range(i + 1, count):
            if blist[i] > blist[j]:
                blist[i], blist[j] = blist[j], blist[i]
    return blist

blist = bubble_sort([4,5,6,7,3,2,6,9,8])
print(blist)

选择排序

  1. 先假定第一个是最小的,依次与其他数比,如果其他数中有比第一个数小就假定这个更小的最小
  2. 再比,第一轮就可以找到最小的那个放到0号位置,然后在假定1号位置数最小与剩下比较,再找到第二小的数放到第1号位置

时间复杂度:O(n²)
空间复杂度:O(1)
稳定性:不稳定

选择排序代码

def select_sort(slist):
    for i in range(len(slist)):
        x = i
        for j in range(i, len(slist)):
            if slist[j] < slist[x]:
                x = j
        slist[i], slist[x] = slist[x], slist[i]
    return slist

slist = select_sort([4,5,6,7,3,2,6,9,8])

插入排序(比如码牌)

  1. 列表被分为有序区和无序区两个部分,最初有序区只有一个元素
  2. 每次从无序区选择一个元素,插入到有序区的位置,直到无序区变空

时间复杂度:O(n²)
空间复杂度:O(1)
稳定性:稳定

插入排序代码

def insert_sort(ilist):
    for i in range(len(ilist)):
        for j in range(i):
            if ilist[i] < ilist[j]:
                ilist.insert(j, ilist.pop(i))
                break
    return ilist
print(insert_sort(ilist=[5,2,9,6,8,4]))

发布了75 篇原创文章 · 获赞 62 · 访问量 4631

猜你喜欢

转载自blog.csdn.net/weixin_45139342/article/details/105081003
今日推荐