两数组合并并排序
- C/C++ code
#include <iostream>using namespace std;//排序int *sort(int arr[],size_t length){ int *p = 0; for(int i=0;i<length;i++){ for(int j=i;j<length;j++){ if(arr[i]>arr[j]){//交换数据 arr[i] ^= arr[j]; arr[j] ^= arr[i]; arr[i] ^= arr[j]; } } } p = arr; return p;}//合并int *com(int arr[],int arr1[],size_t arrL,size_t arr1L){ int *p = 0; int c[arrL+arr1L]; int j = 0; for(int i=0;i<arrL;i++){ c[j++] = arr[i]; } for(int i=0;i<arr1L;i++){ c[j++] = arr1[i]; } p = sort(c,arrL+arr1L); for(int i=0;i<10;i++){ cout<<p[i]<<' '; } cout<<endl; return p;}int main(){ int arr[]= {1,2,8,3,2}; int arr1[]= {1,2,8,3,2}; size_t length = sizeof(arr)/4; // int *a = sort(arr,length); int *a = com(arr,arr1,length,length); for(int i=0;i<10;i++){ cout<<a[i]<<endl; } return 0;}在方法中输出的还是准确的,拿到main中输出就错误了,这是什么原因呢?下面是输出结果
- C/C++ code
1 1 2 2 2 2 3 3 8 822935362293312200911907917229336820091328682009267360200913285922935364657172
[解决办法]
int *com(int arr[],int arr1[],size_t arrL,size_t arr1L){
int *p = 0;
int c[arrL+arr1L];
int j = 0;
for(int i=0;i<arrL;i++){
c[j++] = arr[i];
}
for(int i=0;i<arr1L;i++){
c[j++] = arr1[i];
}
p = sort(c,arrL+arr1L);
for(int i=0;i<10;i++){
cout<<p[i]<<' '; //p已经移动到p[9]
}
cout<<endl;
return p;//这里返回了末端的指针
}
回答完毕