就是上次我的面试题。
我今天一写才彻底明白,什么叫:你平时根本不写代码。。。
因为我连数组的定义都是错的,额!
这个是我写的垃圾代码:
#include<iostream>
#include <algorithm>
using namespace std;
int main(){
int a[4]={1,2,3,4};
int b[4]={2,3,4,5};
int c[100];
for(int i=0;i<(sizeof(a)+sizeof(b))/4;i++){
if(i<sizeof(a)/4){
c[i]=a[i];
}
else{
c[i]=b[i-sizeof(a)/4];
}
}
sort(c,c+(sizeof(a)+sizeof(b))/4);
for(int j=0;j<(sizeof(a)+sizeof(b))/4;j++){
cout<<c[j]<<endl;
}
return 0;
}
写了一个简单的,但是,一直说是有序数组,我就觉得这个“有序”很有陷阱。就查了一下:
public static int[] MergeList(int a[],int b[])
{
int result[];
if(checkSort(a) && checkSort(b)) //检查传入的数组是否是有序的
{
result = new int[a.length+b.length];
int i=0,j=0,k=0; //i:用于标示a数组 j:用来标示b数组 k:用来标示传入的数组
while(i<a.length && j<b.length)
if(a[i] <= b[j]) {
result[k++] = a[i++];
}else{
result[k++] = b[j++];
}
/* 后面连个while循环是用来保证两个数组比较完之后剩下的一个数组里的元素能顺利传入 */
while(i < a.length)
result[k++] = a[i++];
while(j < b.length)
result[k++] = b[j++];
return result;
}
else
{
System.out.print("非有序数组,不可排序!");
return null;
}
}
真的是,原来是这样的,我真的是,哎。。。
一开始不明白这里的while();觉得有问题,但是想了想,应该是只有一个数组会有剩余的,就明白了。啦啦啦啦~~~~