通过python代码实现冒泡排序、插入排序,选择排序,快速排序算法

一、冒泡排序

冒泡排序原理:将相邻的两个数进行比较,较大的数往上冒,较小的数往下降。达到一个升序的效果。

# 冒泡排序
def func(li):
    for i in range(len(li)-1):     # i 表示第i趟
        exchange = False
        for j in range(len(li)-i-1):   # j 表示无序区里的元素下标
            if li[j] > li[j+1]: 
                li[j],li[j+1] = li[j+1],li[j]
                exchange = True
        if exchange == False:
            return None         
li = [3,2,5,4,1,6,7,8,9]
func(li)
print(li)

注意:exchange是一个优化,当第i趟的时候,已经排好序,那么就不用再继续遍历无序区的元素,进行比较。

时间复杂度为:O(n2)

二、选择排序

选择排序原理:以列表的第一个位置的数为基数,与剩余的数中最小的数进行比较,如果基数比最小的数要大,那么交换两个数的位置,否则位置不变。然后再以第二个位置的数为基数,与无序区中的最小数进行比较,如果基数比最小的数要大,那么交换两个数的位置,否则位置不变。以此类推。

# 选择排序
def func(li):
    for i in range(len(li)-1):    # i 表示第i趟
        min_id = i
        for j in range(i+1,len(li)):   #  j 表示无序区的元素下标
            if li[j] < li[min_id]:
                min_id = j
        li[i],li[min_id] = li[min_id],li[i]

li = [9,7,6,8,1,2,3,4,5]
func(li)
print(li)

注意:min_id接收的是每一趟第一个元素的下标。len(li)-1为趟数。

时间复杂度为:O(n2)

三、插入排序

插入排序算法的原理:以列表的第一数为基数,随机抽取剩余数中一个作为随机数,与基数进行比较排序,再随机抽取剩余数中的一个作为随机数,与前面的小列表进行插入排序,依次类推。

扫描二维码关注公众号,回复: 11177450 查看本文章
# 插入排序
def func(li):
    for i in range(1,len(li)):
        tmb = li[i]
        j = i - 1
        while j >= 0 and li[j] > tmb:
            li[j+1] = li[j]
            j -= 1
        li[j+1] = tmb
li = [4,3,6,5,1,2,7,8,9]
func(li)
print(li)

时间复杂度:O(n2)

四、快速排序

快速排序原理比较复杂,看代码

# 快速排序
def func(li,left,right):
    tmd = li[left]
    while left < right:
        while left < right and li[right] >= tmd:
            right -=1
        li[left] = li[right]
        while left < right and li[left] <= tmd:
            left += 1
        li[right] = li[left]
    li[left] = tmd
    return left

def quick_sort(li,left,right):
    if left < right:
        mid = func(li,left,right)
        quick_sort(li,left,mid-1)
        quick_sort(li,mid+1,right)

li = [5,7,3,4,2,1,8,9,6]
# func(li,0,len(li)-1)
quick_sort(li,0,len(li)-1)
print(li)

时间复杂度:O(nlogn)

猜你喜欢

转载自www.cnblogs.com/youhongliang/p/12824538.html