两个int数组,无序要求合并为一个数组并排序不能用.net类库怎我做不出来
解决方案 »
- IA64、x64、x86、i32等都代表什么意思
- 求助!如何让同一个Click事件执行两次
- js高手救命啊~!
- 请问哪有 ASP.NET Starter Kit 挖宝记 的教学录像
- 求:水晶报的注册号
- Xilium.CefGlue.Samples.WpfOsr.exe报错
- [急]请教各路大神:如何用C#创建一个进程外COM服务器(EXE)??
- 请问在webform中如何实现文件下载
- 急!谁能给我帮助?
- 请问高手:怎样在.NET中加入(SYSTEM.WINDOWS.FORM名称空间)?
- windows form 窗口返回值问题
- JAVASCRIPT,停留在某页面30秒钟不操作后,自动转到首页,怎么做?谢谢。
不能用.net封装的类如ArrayList之类的
==
这个考的是合并排序,我以后有个帖子有类似题目还有去除重复数字。
==
这个是典型的键值对问题,如果能用泛型类就用Dictionary<int, int>解决,否则可以用数组解决
然后写成自己的方法不就行了么..
因为C++或者C都是自己写 很少用到封装的东西
简单的思路就是参考2个链表合并的例子
别的没看出什么名堂来 感觉他不让用类库 那考的就是基本的语法、算法
#define N 4//N用来限定数组a的长度
#define M 3//M用来限定数组b的长度
void main()
{
int a[N]={4,3,9,1};//定义数组a[]
int b[M]={44,23,19};//定义数组b[]
int ab[M+N];//数组ab[]是合并后的数组
int i=0,j=0;
/*********数组的组合:***************/
while(i<N)
{
ab[i]=a[i];
i++;
}
while((i<M+N)&&(j<M))
{
ab[i]=b[j];
i++;
j++;
}
/*************冒泡法排序:************/
int x,y,temp=0;
for(x=0;x<M+N-1;x++)
{
for(y=0;y<M+N-1-x;y++)
{
if(ab[y]<ab[y+1])
{
temp=ab[y];
ab[y]=ab[y+1];
ab[y+1]=temp;
}
}
}
/**********输出组合后的数组*********************/
int k=0;
while(k<M+N)
{
printf("%d\t",ab[k]);
k++;
}
}
{
int len = arr1.lenth+arr2.lenth;
int[] arr = new int[len];
//合并两数组
for(int i =0; i<arr1.lenth; i++)
{
arr[i]=arr1[i];
}
for(int i=arr1.lenth;i<len;i++)
{
arr[i]=arr2[i];
}
//冒泡
for(int i=0;i<len-1;i++)
{
for(int j = i+1;j<len;j++)
{
if(arr[i]>arr[j])
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
return arr;
}一般逻辑啊,不知道对不对,就文本写的
先创建一个数组将两个数组添加进去,然后对最后一个数组冒泡排序就可以了static void Main(string[] args)
{
int[] a = new int[3];
a[0] = 3;
a[1] = 6;
a[2] = 2;
int[] b = new int[3];
b[0] = 4;
b[1] = 1;
b[2] = 5; ///得出两个数组的长度
int count = a.Length + b.Length; int[] c = new int[count];
for (int i = 0; i < count; i++)
{
///添加第一数组
if (i < a.Length)
{
c[i] = a[i];
}
///添加第二个数组
else
{
c[i] = b[i - a.Length];
}
}
//排序
for (int i = 0; i < c.Length - 1; i++)
{
for (int k = 0; k < c.Length - 1 - i; k++)
{
if (c[k] > c[k + 1])
{
c[k] = c[k] + c[k + 1];
c[k + 1] = c[k] - c[k + 1];
c[k] = c[k] - c[k + 1];
}
}
}
//输出
for (int i = 0; i < c.Length; i++)
{
Console.WriteLine(c[i]);
}
}
我这也有一个,用的是插入排序,不过是C语言的,你自己将它改为C#吧
/* 合并两个升序序列为一个新的升序序列 */#include "stdio.h"
#define MAXSIZE 100
void main(void)
{
int i,n1,n2,n3;
int p,q;
double arr1[MAXSIZE],arr2[MAXSIZE],tmp;
double arr3[MAXSIZE]; printf("数组元素个数n1,n2=");
scanf("%d%d",&n1,&n2);
printf("数组arr1:");
for(i=0;i<n1;i++)
scanf("%lf",&arr1[i]);
printf("数组arr2:");
for(i=0;i<n2;i++)
scanf("%lf",&arr2[i]);
p=q=0;
n3=0;
while(p<n1&&q<n2)
{
if(arr1[p]<=arr2[q])
{
arr3[n3]=arr1[p];
//n3++;
p++;
}
else{
arr3[n3]=arr2[q];
//n3++;
q++;
}
n3++;
} if(p<n1)
for(i=p;i<n1;i++)
{
arr3[n3]=arr1[i];
n3++;
} if(q<n2)
for(i=q;i<n2;i++)
{
arr3[n3]=arr2[i];
n3++;
} for(i=0;i<n3;i++)
{
printf("%8.2lf",arr3[i]);
if((i)%5==4) printf("\n");
}
printf("\n");
}
{
if( a == null || b== null )
throw new NotSupportedException();
int lena = a.Length;
int lenb = b.Length;
int[] c = new int[lena+lenb];
int i, j, n;
i = j = n = 0;
while (i < lena && j < lenb)
{
if (a[i] < b[j])
{
c[n++] = a[i++];
}
else if (a[i] > b[j])
{
c[n++] = b[j++];
}
else
{
c[n++] = a[i++];
c[n++] = b[j++];
}
}
if (i == lena)
{
while (j < lenb)
c[n++] = b[j++];
}
else
{
while (i < lena)
c[n++] = a[i++];
}
return c;
}