排序算法之归并排序

2024-01-02 05:51:14

归并排序是一种分治策略的排序算法,它将一个无序数组分割成两个子数组,分别对子数组进行排序,然后将两个排序好的子数组合并成一个有序数组。这个过程递归地进行,直到子数组的大小为1,此时认为排序完成。

以下是归并排序的基本步骤:

  1. 分解:将数组分解成两个子数组,直到子数组的大小为1。
  2. 解决:递归地对子数组进行排序,并将结果合并成一个有序数组。
  3. 合并:将两个有序的子数组合并成一个有序数组。

归并排序的时间复杂度为O(nlogn),其中n是需要排序的元素数量。这是因为归并排序采用了分治策略,将问题分解为小规模的子问题,对子问题进行排序,然后合并结果。在合并过程中需要进行n次归并操作,每次归并的时间复杂度为O(n),因此总的时间复杂度为O(nlogn)。

以下是一个Python实现归并排序的例子:

def merge_sort(arr):  
    if len(arr) <= 1:  
        return arr  
    mid = len(arr) // 2  
    left = merge_sort(arr[:mid])  
    right = merge_sort(arr[mid:])  
    return merge(left, right)  
  
def merge(left, right):  
    result = []  
    i = j = 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

这个函数接受一个列表作为参数,并返回一个已排序的列表。内部的merge_sort函数采用递归方式将数组分解成子数组,直到子数组的大小为1。然后,它调用merge函数将两个有序的子数组合并成一个有序数组。merge函数将两个数组合并成一个有序数组,通过比较两个子数组的元素大小,将较小的元素依次添加到结果数组中,直到两个子数组都遍历完毕。

嵌入式物联网需要学的东西真的非常多,千万不要学错了路线和内容,导致工资要不上去!

分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!

扫码进群领资料icon-default.png?t=N7T8https://s.pdb2.com/pages/20230519/16QijNiGb32IFIn.html

文章来源:https://blog.csdn.net/D_ovis/article/details/135330914
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。