python实现简简单单的排序算法-快速排序和归并排序

归并排序

首先 我们认为若一个数组中只有一个数,我们默认这个数组有序

合并两个有序数组

合并两个有序数组,使得合并后的数组依旧有序

def jarray(ret1, ret2):
    temp = []
    r1, r2 = 0, 0
    while r1 < len(ret1) and r2 < len(ret2):

        if ret1[r1] > ret2[r2]:
            temp.append(ret2[r2])
            r2 += 1
        else:
            temp.append(ret1[r1])
            r1 += 1

    temp += ret1[r1:]
    temp += ret2[r2:]

    return temp

归并排序的意思就是 将一个数组分割为多个长度为1的数组,再将这些数组不断的合并为新的数组,从而使得数组有序,即分治思想。

综上所述

# 归并排序
def merge_sort(lis):
    n = len(lis) # 获取列表的长度
    if n <= 1:  
        return lis
    mid = n // 2  # 获取列表中间的下表
    # 将列表一分为二,分别获取左边的列表和右边的列表
    left = lis[:mid]
    right = lis[mid:]
    # 调用函数,继续将列表一分为二,停止条件是:长度为1的时候,就不再继续分了
    left = merge_sort(left)  # left接收的是归并排序后形成的新列表
    right = merge_sort(right)  # right接收的是归并排序后形成的新列表

    temp = jarray(left, right)

    return temp

归并排序的稳定差,因为程序在不断开辟新的数组。

快速排序

def quick_sort(tar, left, right):
    '''
    
    :param tar: 目标数组 
    :param left: 逻辑起始位置
    :param right: 逻辑最后位置
    :return: 
    '''
    if left > right:
        return

    # 两变量
    i = left
    j = right

    # 基准数
    base = tar[left]

    while i != j:

        # 从右向左找 比base小的数 找到停下
        while j > i and tar[j] >= base:
            j -= 1

        # 从左向右找 比base大的数 找到停下
        while j > i and tar[i] <= base:
            i += 1

        # 交换 两个数的位置

        tar[i], tar[j] = tar[j], tar[i]
    # 循环结束 把base的值和tar[i]的值交换

    tar[left] = tar[i]
    tar[i] = base

    #
    quick_sort(tar, left, i - 1)
    quick_sort(tar, i + 1, right)

快速排序的意思就是 在数组中寻找一个基准数,一般为第一个数,然后在数组中分别寻找大于这个基准数的数和小于这个基准数的数,然后将其按照规则分布在两边,再不断重复,换不同的基准数,从而达到排序的效果。

如果有错误或者问题,请在评论区指出和讨论,谢谢

纸上得来终觉浅,绝知此事要躬行

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值