考研数据结构——C语言实现归并排序

  1. 包含头文件 :程序首先包含了标准输入输出库stdio.h,以便使用printf等函数进行输入输出操作。

  2. 定义数组和数组大小 :定义了一个宏N,其值为5,表示数组q的长度。数组q被初始化为{5, 3, 8, 4, 2},这是我们要排序的原始数组。同时定义了一个辅助数组w,用于在归并过程中临时存储数据。

  3. 归并排序函数merge_sort函数是一个递归函数,它接受两个参数lr,分别表示要排序的子数组的起始和结束索引。如果子数组的长度为1(即l >= r),则不需要排序,函数直接返回。函数递归地将数组分为两半,分别对左半部分lmid和右半部分mid + 1r进行排序。

    在归并过程中,使用三个指针ijk,分别指向左半部分的当前元素、右半部分的当前元素和辅助数组w的当前位置。第一个while循环比较左右两部分的当前元素,将较小的元素复制到辅助数组w中。接下来的两个while循环分别处理左右两部分的剩余元素。最后一个for循环将辅助数组w中的元素复制回原数组q,完成归并过程。

  4. 主函数main函数是程序的入口点。调用merge_sort函数,传入0和N - 1作为参数,表示对整个数组q进行排序。使用一个for循环和printf函数打印排序后的数组。

  5. 运行结果 :程序将输出排序后的数组{2, 3, 4, 5, 8},这表示数组q已经被成功排序。

  6. 总结:这个程序展示了归并排序算法的实现,它通过递归地将数组分成更小的部分,然后合并这些部分来排序整个数组。归并排序的时间复杂度为O(n log n),是一种稳定的排序算法。

cpp 复制代码
#include <stdio.h>

#define N 5 // 定义数组q的长度

int q[N] = { 5, 3, 8, 4, 2 }; // 待排序的数组
int w[N]; // 辅助数组

void merge_sort(int l, int r) {
    if (l >= r)
        return;
    int mid = l + r >> 1; // 计算中间位置
    merge_sort(l, mid);
    merge_sort(mid + 1, r);
    int i = l, j = mid + 1, k = 0;
    while (i <= mid && j <= r) {
        if (q[i] <= q[j])
            w[k++] = q[i++];
        else
            w[k++] = q[j++];
    }
    while (i <= mid)
        w[k++] = q[i++];
    while (j <= r)
        w[k++] = q[j++];
    for (i = l, j = 0; j < k; i++, j++)
        q[i] = w[j];
}

int main() {
    merge_sort(0, N - 1);

    printf("Sorted array: ");
    for (int i = 0; i < N; i++) {
        printf("%d ", q[i]);
    }
    printf("\n");
    return 0;
}
相关推荐
leonkay2 小时前
Golang语言闭包完全指南
开发语言·数据结构·后端·算法·架构·golang
雅欣鱼子酱2 小时前
Type-C供电PD协议取电Sink芯片ECP5702,可二端头分开供电调整亮度,适用于LED灯带户外防水超亮灯条方案
c语言·开发语言
casual~3 小时前
第?个质数(埃氏筛算法)
数据结构·c++·算法
仰泳的熊猫3 小时前
题目2308:蓝桥杯2019年第十届省赛真题-旋转
数据结构·c++·算法·蓝桥杯
hssfscv4 小时前
力扣练习训练2(java)——二叉树的中序遍历、对称二叉树、二叉树的最大深度、买卖股票的最佳时机
java·数据结构·算法
Yungoal4 小时前
B/S和C/S架构在服务端接收请求
c语言·开发语言·架构
不想看见4045 小时前
Search a 2D Matrix II数组--力扣101算法题解笔记
数据结构·算法
IronMurphy5 小时前
【算法二十六】108. 将有序数组转换为二叉搜索树 98. 验证二叉搜索树
数据结构·算法·leetcode
InfiniSynapse5 小时前
连上Snowflake就能取数:InfiniSynapse + Spider2-Snow实战企业数据分析
数据结构·图像处理·人工智能·算法·语言模型·数据挖掘·数据分析
WolfGang0073216 小时前
代码随想录算法训练营 Day13 | 二叉树 part03
数据结构·算法·leetcode