备战蓝桥杯Day11 - 归并排序

一、每日一题

自己写的代码:

def hui(num):
    num = str(num)
    num_f = num[::-1]
    if num == num_f:
        print("True")
    else:
        print("False")

hui(121)

思路是将原来的数和倒着读的数是一样的话就是真,否则为假。

先转化为字符串然后切片分割变为倒着读的,再进行比较。

二、归并排序 

归并排序(Merge Sort)是一种基于分治思想的排序算法,它将待排序数组分成若干个子序列,分别对子序列进行排序,然后再将排好序的子序列合并起来,从而得到最终的有序序列。

基本思路

  1. 分解:将待排序数组分解成两个子数组,分别对左右两个子数组进行递归排序。
  2. 合并:将排好序的左右两个子数组合并成一个有序数组。

 排序过程

 

 

 

代码实现

def merge(li, low, mid, high):
    i = low
    j = mid + 1
    ltmp = []
    while i <= mid and j <= high:    # 保证左右两边都有数
        if li[i] < li[j]:
            ltmp.append(li[i])
            i += 1
        else:
            ltmp.append(li[j])
            j += 1
    # while 执行完,肯定有一部分没有数字了
    while i <= mid:       # 右边还有数字
        ltmp.append(li[i])
        i += 1
    while j <=high:    # 左边还有数字
        ltmp.append(li[j])
        j += 1
    # 归并完成之后,再将ltmp的值通过切片赋值给li
    li[low:high+1] = ltmp

def merge_sort(li, low, high):
    if low < high:  # 保证有两个元素,实现递归
        mid = (low + high) // 2
        # 先将左边的数字排序好
        merge_sort(li, low, mid)
        # 右边的数字再排序好
        merge_sort(li, mid+1, high)
        # 最后将左右两边的数字归并排序
        merge(li,low, mid, high)

li = [2,4,3,7,6,1,9,5,8]
merge_sort(li, 0, len(li)-1)
print(li)

 运行结果

三、学习总结 

 家人们谁懂啊!痛经就是我学习路上最大的绊脚石,根本不想学一点,但还是哄着自己学习了,不得不说这个排序真的挺难的,很绕不好理解,自己得多思考思考,也得多练习练习,但是我又觉得力扣上的题都太难了,写不出来,确实最近过年也是有些松懈了,基本上该走的亲戚也走了,该串的门也串了,还是要收心搞好学习!

“当你决定灿烂,山无拦,海无遮。”

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值