四大排序算法用Python实现


网上有很多关于算法的Java和C的实现方式,这里对很多人都不太友好,今天来把几种排序方法用Python实现,算法讲解博客参考:

参考文献

冒泡排序
选择排序
插入排序
快速排序
排序算法的关键在于交换的轮数和交换次数!!

冒泡排序

关键点在于"冒泡"

def bubble(li):
	n = len(li)
	for j in range(n):
		for i in range(n-1-j):
			if li[i] > li[i+1]:
				li[i],li[i+1] = li[i+1],li[i]
	print(li)
if __name__ == "__main__":
	li = [54,26,93,17,77,31,44,55,20]
	bubble(li)

选择排序

关键点在于"每次只取出一个"最小值"排到最左边"
这个选择在于分为 有序和无序序列时候,从后面无序序列选择一个最小的值与有序的交换或者放在其最后面。

def select(li):
	n = len(li)
	for i in range(n):   
		min_index = i   ##每一轮假设第一个数是最小值
		for j in range(i,n):
			if li[min_index] > li[j]: #后面有数比假设最小的值大时
				min_index = j
		li[min_index],li[i] = li[i],li[min_index]
	print(li)
if __name__ == "__main__":
	li = [54,26,93,17,77,31,44,55,20]
	select(li)

插入排序

关键点在于"插入",突破口为有序和无序
这个插入在于分为 有序和无序序列时候,从后面无序序列顺序取出一个元素和前面的每个元素相比较,插入到有序序列中。

def insert(li):
    n = len(li)
    for i in range(n):
        j = i
        while j>0:
            if li[j]<li[j-1]:
                li[j],li[j-1] = li[j-1],li[j]
            j-=1	
if __name__ == "__main__":
	li = [54,26,93,17,77,31,44,55,20]
	insert(li)
	print(li)

快速排序

关键点在于确定好基准元素,基准元素的两边分别为比基准元素小的,和比基准元素大的

def quick(first,last,li):
    mid_value = li[first]
    left = first
    right = last
    if first >=last:
        return None
    while left < right:
        while left <right and li[right] >= mid_value:##先从右边开始
            right -= 1
        li[left] = li[right]
        while left <right and li[left] < mid_value:
            left += 1
        li[right] = li[left]
    li[right] = mid_value 
    quick(first,left-1,li)
    quick(left+1,last,li)
    
if __name__ == "__main__":                                                     
    li = [54,26,93,17,77,31,44,55,20]
    first = 0
    last = len(li)-1
    quick(first,last,li)
    print(li)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值