题意:判断当前排序方式是哪种排序方式,并且给出下一步操作后的结果
tip:模拟
#include<iostream>
#include<algorithm>
using namespace std;
int b[103];
void adjust(int l,int r) {
int i=l;
int j=2*l+1;
while(j<=r) {
if(j+1<=r&&b[j+1]>b[j])
j++;
if(b[i]>=b[j])
break;
swap(b[i],b[j]);
i=j;
j=2*i+1;
}
}
int main() {
int n;
cin>>n;
int a[n];
for(int i=0; i<n; ++i)
cin>>a[i];
for(int i=0; i<n; ++i)
cin>>b[i];
int t=1;
while(t<n&&b[t-1]<=b[t])
++t;
int index=t;
while(t<n&&a[t]==b[t])
++t;
if(t==n) {
printf("Insertion Sort\n");
sort(b,b+index+1);
} else {
printf("Heap Sort\n");
t=n-1;
while(t>1&&b[t]>=b[0])
--t;
swap(b[t],b[0]);
adjust(0,t-1);
}
cout<<b[0];
for(int i=1; i<n; ++i)
cout<<" "<<b[i];
return 0;
}