问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

c语言中的merge函数

发布网友 发布时间:2022-04-21 17:36

我来回答

3个回答

热心网友 时间:2022-05-03 18:06

merge()是C++标准库的函数,主要实现函数的排序和合并,不仅仅是合并,具体要求参照标准库。

#include"stdafx.h"

#include<iostream>

#include<algorithm>

#include<array>

#include<list>

usingnamespacestd;

boolcomp(constinti,constintj){

returni>j;

}

intmain(void){

/*自定义谓词*/

std::array<int,4>ai1={1,3,4,5};

std::list<int>lsti1;

for(constauto&i:ai1)

lsti1.push_front(i);//从大到小

std::array<int,4>ai2={2,6,7,8};

std::list<int>lsti2;

for(constauto&i:ai2)

lsti2.push_front(i);

lsti1.merge(lsti2,comp);

std::cout<<"merge(>):";

for(constauto&i:lsti1)

std::cout<<i<<"";

std::cout<<std::endl;

/*默认谓词*/

std::array<int,4>ai1d={1,3,4,5};

std::list<int>lsti1d;

for(constauto&i:ai1d)

lsti1d.push_back(i);//从小到大

std::array<int,4>ai2d={2,6,7,8};

std::list<int>lsti2d;

for(constauto&i:ai2d)

lsti2d.push_back(i);

lsti1d.merge(lsti2d);

std::cout<<"merge(<):";

for(constauto&i:lsti1d)

std::cout<<i<<"";

std::cout<<std::endl;

return0;

}

扩展资料

Merge算法的两种接口,把两个有序的数组合并到另一个数组中:

void Merge(int *A, int f, int m, int e){

int temp[e-f+1];

int i,first=f,last=m+1;

for(i=0;i<(e-first+1)&&f<=m&&last<=e;i++){

if(A[f]<=A[last]) {

temp[i]=A[f];

f++;

}

else {

temp[i]=A[last];

last++;

}

}

while(f>m&&last<=e){

temp[i]=A[last];

i++;

last++;

}

while(f<=m&&last>e){

temp[i]=A[f];

i++;

f++;

}

for(i=0;first<=e;i++,first++){

A[first]=temp[i];

}

}

参考资料来源:百度百科—c语言

热心网友 时间:2022-05-03 19:24

并不是说类型不匹配,是因为在使用merge之前未定义,把merge放到mergeSor前面,或是在最开始写上这句:
void merge(int*,int,int,int);
希望对你能有所帮助。

热心网友 时间:2022-05-03 20:59

在C语言中,merge.c实现的是合并的方法
一、归并排序算法
算法的递推关系:一个大的数列需要排序,把它从中间分成两部分,每一部分归并排序,然后把排好序的这两个部分再合并起来(合并的时候要按顺序合并)。
算法的Base Case:如果分成的这部分只有一个数,那么这个部分就不用再排序(看做已经排好序的)。
实现这个算法用了三个函数,每个函数在一个文件中,分别为:merge.c sort.c 和 main.c,其中merge.c实现的是合并的方法,sort.c实现的是排序的方法,main.c是一个测试实例。还有三个头文件,分别指出了函数原型。

merge.c:
/*This is a merge program.
* Given an integer ARRAY and three numbers which indicate the begain
*and the end of two subarrays, merge the two subarrays to a bigger
*one. The two subarrays are alrealy sorted from small to big.
* For example, given an array a[10] and three numbers 0, 3 and 5. The
*first array is from a[0] to a[2], the seconde array is from a[3] to
*a[4]. The number 3 and 5 are the upper side. This program merge the
*two arrays together.
*
*Author: Eric
*Time: 2011.01.08
*/
#include <stdio.h>
#include <stdlib.h>

#include "main.h"

void merge(int *a, int idxa, int idxb, int idxc)
{
int i = idxa, j = idxb, k = 0;
int total = idxc-idxa;
//int temp[total] = {0};
int *temp = (int *)malloc(sizeof(int) * total);
if(temp == NULL)
{
fprintf(stderr, "malloc error in merge function\n");
return;
}
while(i < idxb && j < idxc)
{
if(a[i] < a[j])
temp[k++] = a[i++];
else
temp[k++] = a[j++];
}

if(i == idxb)
{
while(j < idxc)
temp[k++] = a[j++];
}
else if(j == idxc)
{
while(i < idxb)
temp[k++] = a[i++];
}

/*Copy the temp to the sorce array*/
for(i = 0, k = idxa; i < total; k++, i++)
a[k] = temp[i];

free(temp);
}

#ifndef MAIN
/*For test*/
int main()
{
int a[10];
int i = 0;
int idxa=1, idxb=5, idxc=8;

printf("Please input 10 numbers to the array:");
for(i = 0; i < 10; i++)
scanf("%d", &a[i]);
printf("Three indexes are %d, %d and %d.\nThe first subarray is:", idxa, idxb, idxc);
for(i = idxa; i < idxb; i++)
printf(" %d", a[i]);
printf("\nThe second subarray is:");
for(i = idxb; i < idxc; i++)
printf(" %d", a[i]);
printf("\n");

merge(a, idxa, idxb, idxc);
printf("The merged array is:");
for(i = idxa; i < idxc; i++)
printf(" %d", a[i]);
printf("\n");

return 0;
}
#endif

merge.h:
/*Author: Eric
*Time: 2011.01.08
*/

void merge(int *a, int idxa, int idxb, int idxc);

sort.c:
/*This is a function for sorting an array useing merge.c
*
*Author: Eric
*Time: 2011.01.08
*/
#include <stdio.h>

#include "main.h"
#include "merge.h"

/*Sort array a, from a[begin] to a[upend-1]*/
void sort(int *a, int begin, int upend)
{
int n = upend - begin; /*the number to be sorted*/
/*The first array is a[idxa] to a[idxb-1]. The second is a[idxb] to a[idxc-1]*/
int idxa = begin,
idxb = ((begin+upend)%2 == 0) ? (begin+upend)/2 : (begin+upend+1)/2,
idxc = upend;

if(n < 2)
{
printf("The array elements are less than two. No need to sort\n");
return;
}
else if(n == 2)
merge(a, idxa, idxb, idxc);
else
{
if(idxb-idxa > 1)
sort(a, idxa, idxb);
if(idxc-idxb > 1)
sort(a, idxb, idxc);
merge(a, idxa, idxb, idxc);
}
}

#ifndef MAIN
#define MAIN
/*For test*/
int main()
{
int a[10] = {1, 4, 8, 5, 10, 25, 54, 15, 12, 2};
int i = 0;

sort(a, 0, 10);

printf("The sorted array is:");
for(i = 0; i < 10; i++)
printf(" %d", a[i]);
printf("\n");

return 0;
}
#endif
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
半条命2存档 求救!!!我玩半条命2,关于"反叛者"这一章的过关问题... 为什么在我玩半条命2的过程中 NPC和敌人都不会动了 也不攻击我 我也... 半条命2为什么我在载入的时候所有的敌人都不动了,水 半条命2游戏中出现A I D什么时敌人为什么都不攻击了?游戏也不能进行下去... 开使玩半条命2还很正常,但是后来突然出现A.L Disabled 敌人不打... 《半条命2》AI失效... 3个月的宝宝头上脱皮怎么办 婴儿额头脱皮怎么回事 为什么宝宝的额头总是起皮? 增值税一般纳税人认定标准是什么? Jpa中的persist方法和merge方法有哪些区别,帮我举... 2020年小规模纳税人和一般纳税人的区别 什么是merge join?merge join的使用方法和使用步... 2020一般纳税人所得税税率是多少 merge和integrate的区别 2020年一般纳税人优惠政策 merge的介绍 公司要具备什么条件才能申请一般纳税人? 2020年商贸公司小规模纳税人每月开票多少才不会被... rebase和merge区别是什么? 目前增值税率各是多少?小企业和一般纳税人各是多少? merge的概述 2020年一般纳税人企业所得税 merge文件怎么打开 merge和temptable的区别 2020年一般纳税人认定标准 请问 Merge 是什么 2021年一般纳税人资质认定标准是什么? Merge啥意思 2020年一般纳税人企业所得税税率 HibernateTemplate的merge()的使用 2020年一般纳税人蔬菜税率是多少 2020年一般纳税人4月份几个点? 有word高手在吗?MailMerge功能怎么用 merge和update的区别 2020年一般纳税人企业所得税优惠政策最新 2020一般纳税人增值税税率 为什么老人说饿死不吃下蛋鸡穷死不卖看家狗 梦见 鸡下蛋 再穷不吃下蛋鸡是什么意思 俗语:下蛋的鸡什么 薏米红豆粥加南瓜后会有什么效果?? 梦见鸡舍的鸡不下蛋了 吃红豆薏米汤的好处是什么 梦见抱鸡下蛋 薏米红豆粥加南瓜后会有什么效果?? 薏米红豆加南瓜吃了有何功效 被拉投资,说是投资19800元,送孵化机一台和500只... 梦见母鸡下蛋,而且下了一个无壳弹,.....