3.
合并有序数组
设计一个程序
,
输入两个有序数组
,
输出一个合并后的有序数组
.
输入
:
第一行
:
整数
n,m
表示数组
1
和数组
2
分别有
n,m
个数字
第二行
: n
个整数
Ni,
表示数组
1
的每个元素
第三行
: m
个整数
Mi,
表示数组
2
的每个元素
(n,m<=100. 0<=Ni,Mi<=1000)
输出
:
合并后的新数组
样例输入
:
5 6
1 3 5 7 9
1 3 5 6 7 8
输出
:
1 1 3 3 5 5 6 7 7 8 9
#include<iostream>
using namespace std;
//排序函数
void order(int*p,int k){
for(int i=0;i<k;i++){
for(int j=0;j<k;j++){
int l=p[i];
if(p[i]>p[j]){
p[i]=p[j];
p[j]=l;
}
}
}
}
int main(){
int m,n;
int *a=new int[m];
int *b=new int[n];
int *c=new int[m+n];
cout<<"样例输入:\n";
cin>>m>>n;
for(int i=0;i<m;i++){
cin>>a[i];
c[i]=a[i];
}
for(int i=0;i<n;i++){
cin>>b[i];
c[i+m]=b[i];
}
order(c,m+n);
cout<<"输出:\n";
for(int i=0;i<m+n;i++){
cout<<c[i]<<" ";
}
return 0;
}
你的代码实际上不是经典的冒泡排序或选择排序,它更像是一种选择最大元素放到指定位置的排序方法。
在你的代码中,order
函数中的两层循环遍历了指定位置的元素与数组中所有其他元素进行比较,然后将当前位置的元素与其他位置的元素进行交换,以便将最大的元素逐渐“推”到数组末尾。尽管这种方法在一定程度上也实现了排序的效果,但它不是标准的冒泡排序或选择排序算法。
所以,你可以将这段代码看作是一种基于选择最大元素放置到指定位置的排序变种,而不是传统意义上的冒泡排序或选择排序。
下面这个代码则是经典的选择排序。
#include<iostream>
using namespace std;
//排序函数
void order(int*p,int k){
for(int i=0;i<k;i++){
for(int j=i+1;j<k;j++){
int l=p[i];
if(p[i]>p[j]){
p[i]=p[j];
p[j]=l;
}
}
}
}
int main(){
int m,n;
int *a=new int[m];
int *b=new int[n];
int *c=new int[m+n];
cout<<"样例输入:\n";
cin>>m>>n;
for(int i=0;i<m;i++){
cin>>a[i];
c[i]=a[i];
}
for(int i=0;i<n;i++){
cin>>b[i];
c[i+m]=b[i];
}
order(c,m+n);
cout<<"输出:\n";
for(int i=0;i<m+n;i++){
cout<<c[i]<<" ";
}
return 0;
}