当前位置: 首页 > article >正文

分治算法解决归并排序问题

分治算法定义:分治算法是一种问题解决方法,它将一个大问题划分为多个相同或相似的子问题,然后递归地解决这些子问题,最后将子问题的解合并得到原问题的解

作用:

排序算法分治算法在排序算法中得到广泛应用。例如,归并排序和快速排序都是基于分治思想的经典排序算法。

图算法许多图算法可以使用分治思想进行求解。例如,图的最小生成树问题可以使用分治算法解决。

矩阵操作矩阵乘法、矩阵求逆和矩阵分解等操作中,分治算法可以将矩阵划分为子矩阵,并递归地进行计算。

代码实现

#include <stdio.h>

// 合并两个有序数组
void merge(int arr[], int left[], int leftSize, int right[], int rightSize) {
    int i = 0, j = 0, k = 0;

    // 将较小的元素逐个放入原数组
    while (i < leftSize && j < rightSize) {
        if (left[i] <= right[j]) {
            arr[k++] = left[i++];
        } else {
            arr[k++] = right[j++];
        }
    }

    // 将剩余的元素放入原数组
    while (i < leftSize) {
        arr[k++] = left[i++];
    }

    while (j < rightSize) {
        arr[k++] = right[j++];
    }
}

// 归并排序
void mergeSort(int arr[], int size) {
    if (size <= 1) {
        return;  // 数组已经有序或为空,无需排序
    }

    int mid = size / 2;

    int left[mid];
    for (int i = 0; i < mid; i++) {
        left[i] = arr[i];
    }

    int right[size - mid];
    for (int i = mid; i < size; i++) {
        right[i - mid] = arr[i];
    }

    mergeSort(left, mid);  // 对左半部分进行归并排序
    mergeSort(right, size - mid);  // 对右半部分进行归并排序

    merge(arr, left, mid, right, size - mid);  // 合并左右两个有序数组
}

// 打印数组
void printArray(int arr[], int size) {
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
}

int main() {
    int arr[] = {9, 5, 7, 1, 3};
    int size = sizeof(arr) / sizeof(arr[0]);

    printf("原始数组:");
    printArray(arr, size);

    mergeSort(arr, size);

    printf("排序后数组:");
    printArray(arr, size);

    return 0;
}

http://www.kler.cn/a/107018.html

相关文章:

  • Linux基础1
  • 代码随想录第二十一天| 669. 修剪二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转换为累加树
  • LeetCode【0035】搜索插入位置
  • 【HarmonyOS NEXT】一次开发多端部署(以轮播图、Tab栏、列表为例,配合栅格布局与媒体查询,进行 UI 的一多开发)
  • Mac intel 安装IDEA激活时遇到问题 jetbrains.vmoptions.plist: Permission denied
  • 搭建深度学习开发环境
  • 【ROS入门】雷达、摄像头及kinect信息仿真以及显示
  • 前端的基本介绍
  • 5.MySQL基本查询
  • 智慧垃圾站:AI视频智能识别技术助力智慧环保项目,以“智”替人强监管
  • MongoDB 的集群架构与设计
  • Angular-03:组件模板
  • 如何在 uniapp 里面使用 pinia 数据持久化 (pinia-plugin-persistedstate)
  • 关于路由转发
  • Mysql binlog日志功能使用,简单易懂
  • centos更改yum源
  • 2023大湾区杯粤港澳金融数学建模竞赛思路+模型+代码
  • 直方图均衡化算法
  • 最长公共子序列(LCS)与最长上升子序列(LIS)问题的相互转换
  • uni-app集成uni-simple-router,报错:Uncaught ReferenceError: ROUTES is not defined
  • element-plus form表单的二次封装
  • C++工程使用curl 静态库
  • 3DCAT+东风日产:共建线上个性化订车实时云渲染方案
  • k8s客户端配置
  • 2.22每日一题(含绝对值的定积分+极值+凹凸区间+单调区间)
  • 汽车托运如何获得赔偿