Python排序算法(一)

用python实现常用排序算法(一)


前言

本文主要利用python语言,介绍了冒泡排序,选择排序,插入排序,如果没有找到自己需要的排序方法,请关注后面的文章哦!(对于其他语言,只要学会方法都可以迎刃而解哦!)

一. 冒泡排序

1)实现代码
冒泡排序嘛,一个应该是最基础的算法了,首先先不说直接上代码: ```python def bubble_sort(list1): count = len(list1) for i in range(0,count): for j in range(i + 1,count): if list1[i] > list1[j]: list1[i] , list1[j] = list1[j] , list1[i] return list1 ``` 注意我这里使用的是从小到大排序哦,想从大到小排序的,请把所有有关判断大小的操作倒过来即可。
2)算法的简介及流程图
对于列表中的一个数,我们将其与后面的数进行比较,由于此时是按照从小到大顺序进行排列,那么如果前面的数比后面的数要大了,就需要交换两个数。

下面就是算法的流程图:
在这里插入图片描述

3)算法的难点
注意一下,按照从大到小还是从小到大的顺序进行排序

二. 选择排序

1)实现代码
废话不多说,先上代码,我依旧是按照从小到大顺序进行排列的:
def selection_sort(list1):
	count = len(list1)
	for i in range(0,count):
		minvalue = list1[i]
		for j in range(i + 1 , count):
			if list1[j] < minvalue : 
				list1[j] , minvalue = minvalue , list1[j] 
		list1[i] = minvalue 
	return list1
2)算法的简介及流程图
对于选择排序稍微比冒泡排序难上那么一丢丢, 选择排序就是找到未排序序列中的最小值,将其添加到已经排序序列的最后。

算法的流程图如下:
在这里插入图片描述

3)算法的难点
1)为什么能直接添加到已排序列表的最后呢?
很简单,我是从开始一步一步进行循环的嘛,那么之前更小的值已经被添加在已排序列表之后。 (别忘记我是从小到大进行排序的!)
3)另一种写法
之前的方法我是按照value的值进行排序的,大家也可以根据索引进行简化操作:
def selection_sort(list1):
	count = len(list1)
	for i in range(0,count):
		minindex = i 
		for j in range(i + 1 , count):
			if list1[j] < list1[minindex]:
				minindex = j 

		#i不是最小数的时候,i和最小数交换
		if i != minindex:
			list1[i] , list1[minindex] = list1[minindex] , list1[i]
	return list1

三. 插入排序

1)实现代码
来来来,先看看代码,注意这里我也是按照从小到大进行排序的:
def insert_sort(list1):
	count = len(list1)
	for i in range(0,count):
		currentvalue = list1[i]
		pre = i - 1
		while pre >= 0 and currentvalue < list1[pre]:
			list1[pre + 1] = list1[pre]
			pre -= 1
		list1[pre + 1] = currentvalue
	return list1
2)算法的简介及流程图
插入排序,言简意赅就是从未排序的元素中挑选,之后将其在已经排序的元素中选择合适的位置,当然这个合适的位置由你来决定(从小到大还是从大到小)[!!!这里埋个坑,快速排序方法其实类似,只是对于选择合适的位置有着较快的方法]

算法的流程图如下:
在这里插入图片描述

3)算法的难点
1)为什么需要用到pre呢?
未排序和排序的列表其实只有一墙之隔,既然需要从已排序的列表中找到合适的位置,那么必须知道开始的位置。简而言之,就是找到已经排序的位置。
2)从小到大排序
currentvalue < list1[pre]
当前值小于你从后往前扫描的值,那么由此推出从前向后应该是递增的。

总结

以上就是冒泡排序,插入排序,选择排序的相关内容了,可能会很简单,之后可能会添加有关时间复杂度的相关内容,第一次认真写博客,加油加油加油!!
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值