思路
- 先对初始序列a一步一步对比插入排序,如果是插入排序,继续迭代一次并输出。
- 不是插入,对序列b用堆的向下调整即可。
反思
- 可以用vector存储a,b。可以直接比较,并可以把vector作为堆向下调整的参数。
- 除了可以继续迭代一次得到结果,也可以使用sort(a,a+i)。
代码
using namespace std
vector<int> a,b
int n
void downAdujust(int low,int high,vector<int> &a){
int i=low,j=2*i
while(j<=high){
if(j+1<=high&&a[j]<a[j+1]) j++
if(a[j]<=a[i]) break
int temp=a[i]
a[i]=a[j]
a[j]=temp
i=j
j=2*i
}
}
int main(){
scanf("%d",&n)
int x
a.push_back(0)
b.push_back(0)
for(int i=1
scanf("%d",&x)
a.push_back(x)
}
for(int i=1
scanf("%d",&x)
b.push_back(x)
}
int i
int flag=0
for(i=2
int temp=a[i]
int j=i
while(j>1&&a[j-1]>temp){
a[j]=a[j-1]
j--
}
a[j]=temp
if(flag==1){
for(int i=1
printf("%d",a[i])
if(i!=n) printf(" ")
}
break
}
if(a==b){
printf("Insertion Sort\n")
flag=1
}
}
if(flag==0){
printf("Heap Sort\n")
int i
for(i=2
if(b[i]>b[1]) break
}
i--
swap(b[1],b[i])
downAdujust(1,i-1,b)
for(int i=1
printf("%d",b[i])
if(i!=n) printf(" ")
}
}
return 0
}