合并排序算法(C语言版)

#include <stdio.h>

void Copy(int *a, int *b, int left, int right) {

int i;

for(i=0;i<right-left+1;i++)

{

ai+left = bi;

}

}

// 将 aleft,middle 和 amiddle+1,right合并到 bleft, right中

void Merge(int *a, int left, int middle, int right) {

int bright-left+1;

int i = left; // left 到 middle 这一段的起始位置

int j = middle + 1; // middle+1 到 right 这一段的起始位置

int k = 0; // 保存到 b 数组中的对应位置索引

int q; // 循环变量

// 当 a1,middle 和 amiddle+1,right 中都有元素时,小的保存到 b 数组中

while((i<=middle)&&(j<=right)){

if(ai<=aj){

bk = ai;

i++;

}else{

bk = aj;

j++;

}

k++;

}

// 把余下部分加入到数组中

if(i>middle){ // 将 amiddle+1,right中剩余部分拷贝到 b 数组当中

for(q=j; q<=right; q++){

bk = aq;

k++;

}

}else{ // 将 a1,middle中剩余部分拷贝到 b 数组当中

for(q=i; q<=middle; q++){

bk = aq;

k++;

}

}

Copy(a, b, left, right); // 复制回数组 a

}

// 递归写法

void MergeSort(int *a, int left, int right){

int middle;

if(left < right){ // 当至少有两个元素时

middle = (left + right)/2; // 取中点

MergeSort(a, left, middle); // 对 aleft,middle 进行合并排序

MergeSort(a, middle+1, right); // 对 amiddle+1,right 进行合并排序

Merge(a, left, middle, right); // 合并到数组 a

}

}

int main() { //定义 main()主函数

int arrayLength,i;

printf("请输入要合并排序的数组大小:(数组最大上限100)\n");

scanf("%d",&arrayLength);

int aarrayLength;

printf("请输入待排序序列:\n");

for(i=0; i<arrayLength; i++){ //a控制数组大小

scanf("%d",&ai);

}

MergeSort(a, 0, arrayLength-1);

printf("合并排序后的数组为:\n");

for( i=0; i<arrayLength; i++){

printf("%d ",ai);

}

return 0;

}

相关推荐
专注仿真16 小时前
知识问答模型用到的算法集详解及代码实例
python·算法·代码·大模型训练·控制算法
罗西的思考17 小时前
【轻量化复刻大模型 / KIMI K3】AttnRes 模块交互式演示
人工智能·算法·机器学习
好悬给我拽开线21 小时前
ZILOT 论文解析
算法
饮水桶_T1 天前
JAVA IO流笔记
开发语言·数据结构·算法
星夜离尘561 天前
MATLAB 离散数据分箱:半开区间、末端点与计数、加权和、平均
算法·matlab
Pniubi1 天前
力扣76.最小覆盖子串
算法·leetcode·职场和发展
地平线开发者1 天前
征程6|用 hrt\_model\_exec 看清 YOLOv5x 的输入、原始输出和后处理
人工智能·算法
csdn_aspnet1 天前
C++ 3个有序点的方向(Orientation of 3 ordered points)
c++·算法
赤生云电竞1 天前
GPU算力共享平台架构实践:任务分发与资源隔离的关键配置
算法·架构·gpu算力
青少儿编程课堂1 天前
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:折半搜索优化子集枚举(Meet in the Middle)解析
c++·python·算法·bfs·信息学竞赛