归并排序算法

归并排序算法

归并排序是一种基于分治策略的排序算法,它的基本思想是将待排序的序列不断划分为两半,直到每个子序列只剩下一个元素,然后逐步合并这些有序子序列,最终得到完全排序的序列。

优点:

稳定性:归并排序不会改变相等元素的相对顺序,对于需要保持原有顺序的数据来说这是一个优势。
时间复杂度稳定:归并排序的时间复杂度始终为O(n log n),无论数据如何分布,效率相对较高。
适合处理大数据量:因为是递归的,所以它适用于一次性处理大文件或内存无法容纳整个数组的情况。

缺点:

额外空间消耗:归并过程中需要临时数组存储,如果内存有限,可能会造成空间占用较大。
不适合小规模数据:由于涉及到拆分、合并的过程,对小规模数据来说,其内部递归产生的开销可能导致效率不高。

实现原理:

分割:首先将待排序数组一分为二。
排序:对这两个子数组分别进行递归排序。
合并:将两个已排序的子数组合并成一个大的排序数组。
实际应用:
归并排序常用于外部排序,即当数据量超过内存容量,需要借助磁盘I/O进行操作时。比如处理大型数据库的数据筛选或数据分析。

Python实现:

Python
def merge_sort(arr):
    if len(arr) <= 1:
        return arr
    
    mid = len(arr) // 2
    left_half = arr[:mid]
    right_half = arr[mid:]
    
    left_half = merge_sort(left_half)
    right_half = merge_sort(right_half)
    
    return merge(left_half, right_half)

def merge(left, right):
    result = []
    i, j = 0, 0

    while i < len(left) and j < len(right):
        if left[i] <= right[j]:
            result.append(left[i])
            i += 1
        else:
            result.append(right[j])
            j += 1

    # 将剩余部分添加到结果
    result.extend(left[i:])
    result.extend(right[j:])
    return result

# 使用示例
unsorted_list = [9, 7, 5, 11, 12, 2, 14, 3, 10]
sorted_list = merge_sort(unsorted_list)
print("Sorted list:", sorted_list)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值