python实现原地归并排序 in-place_merge_sort

import time
def reverse(arr, i, index, j):
    list1 = arr[i:index]
    reverse_list1 = list(reversed(list1))  # 内存反转序列arr[i, index)
    list2 = arr[index:j]
    reverse_list2 = list(reversed(list2))  # 内存反转序列arr[index, j)
    list3 = list(reversed(reverse_list1 + reverse_list2))  # 原地归并两个子序列
    list4 = arr[0:i] + list3 + arr[j:]  # 归并后的整个序列
    for i in range(len(list4)):
        arr[i] = list4[i]
    return arr

def merge(arr, l, m, h):
    i = l
    j = m + 1
    while i < j and j <= h:
        while i < j and arr[i] <= arr[j]:
            i += 1
        index = j
        while j <= h and arr[j] < arr[i]:
            j += 1
        # print("low: {},index:{},high:{}".format(i, index, j))
        arr = reverse(arr, i, index, j)
        i = i + (j - index)
    return arr

def merge_sort(arr, l, h):
    if l < h:
        mid = l + (h - l) // 2
        merge_sort(arr, l, mid)
        merge_sort(arr, mid + 1, h)
        result = merge(arr, l, mid, h)
        return result

if __name__ == '__main__':
    user_input = input('输入10个以逗号分隔的数据:\n').strip()
    data=[int(item) for item in user_input.split(',')]
    print("排序前: ", data)
    start = time.perf_counter()
    result = merge_sort(data, 0, len(data) - 1)
    print("排序后:", result)
    end = time.perf_counter()
    print("总共用时:", end - start)

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值