在进行归并排序时千万要注意每次多出来的那一丢丢,如果出现了段错误,有可能就是这里写的不正确。
我想运行时错误可能约等于段错误?因为我用vector时显示运行时错误,改回普通数组就提示段错误。
#include <iostream>
#include <algorithm>
using namespace std;
int a[110],b[110];
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
for(int i=0;i<n;i++){
cin>>b[i];
}
bool isinsert=true;
int index=0;
for(int i=0;i<n-1;i++){
if(b[i]>b[i+1]){
index=i;
break;
}
}
for(int i=index+1;i<n;i++){
if(a[i]!=b[i]){
isinsert=false;
break;
}
}
if(isinsert){
printf("Insertion Sort\n");
sort(a,a+index+2);
for(int i=0;i<n;i++){
if(i!=0){
printf(" ");
}
printf("%d",a[i]);
}
}else{
printf("Merge Sort\n");
bool isthatk=false;
int k=1;
while(isthatk==false){
isthatk=true;
for(int i=0;i<n;i++){
if(a[i]!=b[i]){
isthatk=false;
break;
}
}
k=k*2;
for(int i=0;i<n-n%k;i=i+k){
sort(a+i,a+k+i);
}
sort(a+n-n%k,a+n);
}
for(int i=0;i<n-n%k;i=i+k){
sort(b+i,b+k+i);
}
sort(b+n-n%k,b+n);
for(int i=0;i<n;i++){
if(i!=0){
printf(" ");
}
printf("%d",b[i]);
}
}
return 0;
}