三大排序算法:

三大排序算法

冒泡排序法:最原始的方式,相邻两个数比较,交换位置n轮n次.
**快速排序法:**比第一个数大的就放到右边去,小的就放到左边去.左右再分别进行同样的操作:运气好logn次就解决,运气最差n轮n次.
**归并排序法:**将数列分成左右两列,直至分成1个数字和左1数字,右1数字.然后合并,合并时小的放在前面.
代码与注释如下:

begin="3210"
for i in begin:
	print('倒计时:{}'.format(i))

print("\n\n"+"序章:先生成一个随机序列".center(50,"-")+"\n\n")
#-------------------序章:先生成一个随机序列-------------------
import random
def randlist(n):
	lst = []
	for i in range(n):
		lst.append(random.randrange(1000))
		#randrange和randint的主要区别就是ranrange是惯例,randint可以随即到起始数值
	return lst
if __name__ == '__main__':
	lst = randlist(10)
	print(lst)
#print(random.randint.__doc__)
#Return random integer in range [a, b], including both end points.
#print(random.randrange.__doc__)
'''Choose a random item from range(start, stop[, step]).

        This fixes the problem with randint() which includes the
        endpoint; in Python this is usually not what you want.'''

print("\n\n"+"第一种:Bubble冒泡排序法".center(50,"-")+"\n\n")
#--------------------第一种:冒泡排序法---------------------
#比较相邻的两个位置,交换大数到后面,n个数一轮比较n-1次下来就是最后面一个数是最大数.
#第二轮最后一个数就不用再比较了,比较前面的n-1个数,倒数第二个就变成了最大数
#以此类推,一直到第n轮,比较0次.剩下第一个数,就不用再比较了,返回自身就可以了.
#可以看到有两个参数:总共n个数总共比较了n-1轮.第i轮,比较n-i次.
lst = randlist(10)
print(lst)
def bubble_sort():
	for i in range(1,len(lst)):
		for j in range(len(lst)-i):
			if lst[j]>=lst[j+1]:
				lst[j],lst[j+1]=lst[j+1],lst[j]#交换赋值
		#print("第{}轮,比较了{}次,返回的列表是:{}".format(i,len(lst)-i,lst),end="\n")
	return lst
if __name__ == '__main__':
	print("冒泡排序结果是:\n%s"%bubble_sort())





print("\n\n"+"第二种:Quick快速排序法".center(50,"-")+"\n\n")

#--------------------第二种:快速排序法---------------------
#二\快速排序法,用递归函数解决,小的在左边,大的放右边.
#递归一直调用自己,直至只剩自己,左右都没有数字.
lst = randlist(10)
print(lst)
def quick_sort(lst):
	if len(lst) <= 1:#只有一个数或者没有数的时候,就返回自身结束.
		return lst
	else:
		leftlst=[]
		rightlst=[]
		for i in lst[1:]:
			if i <= lst[0]:
				leftlst.append(i)
			else:
				rightlst.append(i)
		return quick_sort(leftlst)+[lst[0]]+quick_sort(rightlst)
if __name__ == '__main__':
	print("快速排序结果是:\n{}".format(quick_sort(lst)))

print("\n\n"+"第三种:Merge归并排序法".center(50,"-")+"\n\n")
#------------------第三种:Merge归并排序法------------------
#将数据分成左右两列,左右再不断分列,分别排序,左右两列再不断的调用函数自己分列
#只有一个数时,就不能再分列了.就开始合并成有序数列
#根据左右大小比较,新数列先加数值较小的数
lst = randlist(10)
print(lst)
def merge_sort(lst):
	if len(lst) <= 1:
		return lst
	else:
		middle = len(lst)//2
		left,right = lst[0:middle],lst[middle:]
		return mergelst(merge_sort(left),merge_sort(right))
def mergelst(left,right):
	mlst=[]
	while left and right:
		if left[0] >= right[0]:
			mlst.append(right.pop(0))
		else:
			mlst.append(left.pop(0))
	while left:
		mlst.append(left.pop(0))
	while right:
		mlst.append(right.pop(0))
	return mlst
print("归并排序法的结果是:%s"%merge_sort(lst))

huibif的学习笔记

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值