归并排序基础理解

归并排序基础代码注释讲解

#include <stdio.h>

#include <stdbool.h>

#include <stdlib.h>

void merge(int arr[], int left, int mid, int right) {

//n1 n2 只是两个标签,用来表示左右两个子数组的长度

int n1 = mid - left + 1;

int n2 = right - mid;

//动态开两个子数组的对应的内存空间

int* L = (int*)malloc(n1 * sizeof(int));

int* R = (int*)malloc(n2 * sizeof(int));

//把大数组拆开成两个子数组并且把值分开存到子数组里面

//左子数组

for (int i = 0; i < n1; i++) {

L[i] = arr[left + i];

}

//右子数组

for (int j = 0; j < n1; j++) {

R[j] = arr[mid + 1 + j];

}

//建立效指针变量,用来指定

int i = 0, j = 0; //两个子数组箭标

int k = left; //临时数组的效指针变量,但是这个代码是直接原地更改

//进入循环的条件:两个数组都没有遍历完,要都还有元素

//限制:两个子数组要是有序的,也正因此才用递归递进到基准条件才进行调用

while (i < n1 && j < n2) {

//两个数组左右依次比较排空掉内部元素,把较小的那个放到临时数组里面

if (L[i] <= R[j]) {

arr[k] = L[i];

i++; //哪个子数组被放拿走元素放到临时数组里面了自然要移动它的指针

} else {

arr[k] = R[j];

j++; //哪个子数组被放拿走元素放到临时数组里面了自然要移动它的指针

}

k++; //一次操作之后,临时数组里面也有了一个元素,效指针变量要移动一下

}

//检查左子数组是否剩余

while (i < n1) {

arr[k] = L[i];

i++;

k++;

}

//检查右子数组是否剩余

while (j < n2) {

arr[k] = R[j];

j++;

k++;

}

free(L);

free(R);

}

//排序的实现,利用递归分而治之的思想

void sort(int arr[], int left, int right) {

if (left < right) {

int mid = left + (right - left) / 2;

sort(arr, left, mid); //mid = 0时候,left = 0, right = 1, mid = 0

sort(arr, mid + 1, right); //mid = 0时候,无意

merge(arr, left, mid, right); //mid = 0时候正式开始归并排序

}

}

int main() {

system("chcp 65001");

int num[] = {6, 4, 3, 2, 9, 8, 1, 4};

int n = sizeof(num) / sizeof(num[0]);

sort(num, 0, n - 1);

for (int i = 0; i < n; i++) {

printf("%d ", num[i]);

}

return 0;

}

相关推荐
qq_463408422 分钟前
React Native跨平台技术在开源鸿蒙中使用WebView来加载鸿蒙应用的网页版或通过一个WebView桥接本地代码与鸿蒙应用
javascript·算法·react native·react.js·开源·list·harmonyos
Jul1en_3 分钟前
【算法】位运算
算法
苏州知芯传感7 分钟前
柔性抓取的“慧眼”:MEMS 3D视觉如何让机器人精准识别无序堆叠的复杂钣金件?
算法·3d·机器人·mems
iAkuya15 分钟前
(leetcode)力扣100 22相交链表(双指针)
算法·leetcode·链表
chao18984425 分钟前
基于MATLAB的ADI方法求解偏微分方程详解
开发语言·算法·matlab
智驱力人工智能30 分钟前
超越识别 将光学字符识别(OCR)技术转化为可靠业务能力的交付思维 光学字符识别 金融票据OCR识别系统 物流单据自动识别技术
人工智能·opencv·算法·目标检测·ocr·边缘计算
算法与编程之美41 分钟前
解决tensor的shape不为1,如何转移到CPU的问题
人工智能·python·深度学习·算法·机器学习
natide42 分钟前
词汇/表达差异-8-Token Overlap(词元重叠度)
大数据·人工智能·深度学习·算法·自然语言处理·nlp·知识图谱
hetao17338371 小时前
2025-12-22 hetao1733837的笔记
c++·笔记·算法
云技纵横1 小时前
Redis 数据结构底层与 Hash 优于 JSON 的工程实践
数据结构·redis·哈希算法