python中常见的排序:选择排序,冒泡排序

1、选择排序:

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小的元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕就可以得到一个从小到大排序的列表。

'''选择排序'''
num = [3,8,5,7,2,1,4,6,9]
for i in range(0,len(num)-1):
	for j in range(i+1,len(num)-1):
		if num[i] >= num[j]:
			num[i],num[j]=num[j],num[i]

print(num)

代码解释:随机一个num表示的数组,i和j表示数组中每个数的下标;用for循环实现:从下标为0的数与下标为1的数进行比较,如果前者大于后者,两个数交换位置(较小的数排在了前面);接着下标为0的数与下标为2的数进行比较,之后下标为0的数与下标为3的数进行比较,以此类推,比完最后一个数之后,最小的那个数就排在了最前面;下标0与后面每一个下标的数比完之后,最小的数排在了第一个,之后下标1再与后面的每一个下标进行比较,第二小的数排在来第二的位置,以此类推,进行了(len(num)-1)个循环后,排序完毕。

 2、冒泡排序

冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果前者比后者大就将他们交换。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端。

'''冒泡排序'''
num = [3,2,8,9,1,5,6,4,7]
for i in range(0,len(num)-1):
	for j in range(0,len(num)-1-i):
		if num[j] >= num[j+1]:
			num[j],num[j+1] = num[j+1],num[j]

print(num)

代码解释:随机一个num表示的数组,j和j+1表示数组中每个数的下标;用for循环实现:下标为0的数与下标为0+1的数进行比较,如果前者大于后者就交换位置,下标为1的数与下标为1+1的数进行比较,之后下标为2的数与下标为2+1的数进行比较,以此类推,一轮循环之后,最大的数就排在了数组的最后面;第二个for循环中,len(num)-1-i的原因是,经过i个循环之后,最后的i个数已经是最大的几个数且排好了序,不需要再进行比较排序了。进行了(len(num)-1)个循环后,排序完毕。

3、插入排序

插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。从第二个元素开始和前面的元素进行比较,如果前面的元素比当前元素大,则将前面元素后移,当前元素依次往前,直到找到比它小或等于它的元素插入在其后面。然后选择第三个元素,重复上述操作,进行插入。依次选择到最后一个元素,插入后即完成所有排序。

'''插入排序'''
num = [8,3,2,6,1,4,9,7]
for i in range(1,len(num)):
	for j in range(i,0,-1):
		if num[j] <= num[j-1]:
			num[j],num[j-1] = num[j-1],num[j]

print(num)

代码解释:随机一个num表示的数组,j表示数组中每个数的下标;用for循环实现:i从1开始依次增大;将下标为i的数与下标为i-1的数进行比较,如果前者小于后者,则两者交换位置;之后将下标为i-1的数与下标为i-2的数进行比较,如果前者小于后者,则两者交换位置;以此类推,前i个数中的最小值就排在了最前面。经过len(num)-1个循环后,排序完成。

4、计数排序

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值