python最简单的两种排序算法-冒泡,选择排序(代码,图解)

1.冒泡排序

冒泡排序从列表的开头处开始,逐个比较相邻两个数据,如果前面的值大于后面的值,交换两个数据的位置,一直比较到列表的末尾。这个过程就是将最大的项以冒泡的方式排到末尾。然后算法从列表开头到倒数第二项重复这一过程,依次类推。

在这里插入图片描述

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


alist = [1, 4, 3, 8, 5]
bubble_sort(alist)
print(alist)

冒泡排序优化
可以加入判断,如果没有元素交换,说明数据在排序过程中已经有序,直接退出循环,减少不必要的循环。

def bubble_sort(alist):
    for j in range(len(alist)-1,0,-1):
        swapped = False
        for i in range(j):
            if alist[i] > alist[i+1]:
                swapped = True
                alist[i], alist[i+1] = alist[i+1], alist[i]
        if not swapped:
            break


alist = [1, 4, 3, 8, 5]
bubble_sort(alist)
print(alist)

2.选择排序

选择排序的工作原理如下:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

实现思路:设第一个元素为比较元素,依次和后面的元素比较,比较完所有元素找到最小的元素,将它和第一个元素互换。重复上述操作,我们找出第二小的元素和第二个位置的元素互换,以此类推找出剩余最小元素将它换到前面,即完成排序。

在这里插入图片描述

def selection_sort(alist):
    for i in range(len(alist)-1):
    	# 将起始元素设为最小元素
        min_vx = i
        for j in range(i+1, len(alist)):
            if alist[j] < alist[min_vx]:
            	# 记录最小位置
                min_vx = j
        # 将最小元素与起始元素互换
        alist[i], alist[min_vx] = alist[min_vx], alist[i]


alist = [1, 4, 3, 8, 5]
selection_sort(alist)
print(alist)
                

猜你喜欢

转载自blog.csdn.net/weixin_44857400/article/details/107419969
今日推荐