题目

题意:判断当前排序方式是哪种排序方式,并且给出下一步操作后的结果

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;
}