python算法与数据结构学习笔记

排序算法

1. 冒泡排序

冒泡排序,从左到右,分别比较两个相邻数字的大小,如果后面一个数小于前面的数就进行交换。

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

输入一个list:  A = [5, 6, 3, 4, 1, 0, 2]

结果:

可以看到一轮轮下来大的数字被慢慢往后移。

 

2. 选择排序

每次从序列中找到最小的数插入序列的迭代位置。这样排序结束就是从小到大。

def select_sort(seq):
    l = len(seq)
    for i in range(l-1):
        min_val =  i
        for j in range(i+1,l):
            if  seq[j]<seq[min_val]:
                min_val = j
        if min_val!= i:
            seq[min_val],seq[i] = seq[i],seq[min_val]
        print(seq)

相同的list:

结果:

 

3. 插入排序

假设从第一个元素开始,每一个元素都是新插进来的,那么每次插进的元素和之前的比较,放入该放的地方即可。

def insert_sort(seq):
    l = len(seq)
    for i in range(1,l):
        val =  seq[i]
        pos = i
        while val < seq[pos-1] and pos > 0:
            seq[pos] =seq[pos-1]
            pos-=1
        seq[pos] = val
        print(seq)

结果:

 

4.归并排序

基本思想就是:

  • 分解:将待排序的 n 个元素分成各包含 n/2 个元素的子序列
  • 解决:使用归并排序递归排序两个子序列
  • 合并:合并两个已经排序的子序列以产生已排序的答案
# 用递归的思想来解决:
# 首先找到中间的数字作为基准,在左右两边分别进行排序,最后将两个有序的序列进行合并:
def merge_sort(seq):
    if len(
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值