for(int i=1;i<=n;i++)
sort(a,a+i);
- 堆排序
因爲輸入序列一定是排好的大根堆,因此只需要向下調整爲新的大根堆
堆排序
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,a[105],nt[105];
void HeapSort()
{
int i=n-1;
while(i)
{
if(nt[i]<=nt[0])break;
i--;
}
swap(nt[0],nt[i]);
int l=0,h=l*2+1;
while(h<i)
{
if(h+1<i)
{
if(nt[h+1]>nt[h])
{
swap(nt[h+1],nt[l]);
l=h+1;h=l*2+1;
}
else
{
swap(nt[h],nt[l]);
l=h;h=l*2+1;
}
}
else if(nt[h]>nt[l])
{
swap(nt[h],nt[l]);
break;
}
}
}
int main()
{
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(int i=0;i<n;i++)
{
scanf("%d",&nt[i]);
}
int t=1;
while(t<n)
{
if(nt[t]<nt[t-1])break;///////////////////若<=會錯測試點4/////////////////////////////////////////////////////
t++;
}
bool flag=1;
int tt=t+1;
while(t<n)
{
if(a[t]!=nt[t])
{
flag=0;
break;
}
t++;
}
if(flag)
{
printf("Insertion Sort\n");
sort(a,a+tt);//a
for(int i=0;i<n-1;i++)
printf("%d ",a[i]);
printf("%d\n",a[n-1]);
}
else
{
printf("Heap Sort\n");
HeapSort();//nt
for(int i=0;i<n-1;i++)
printf("%d ",nt[i]);
printf("%d\n",nt[n-1]);
}
return 0;
}