PAT程序设计考题——甲级1098(Insertion or Heap Sort ) C++实现

#include<iostream>
#include<math.h>
#include<algorithm>
#include<queue>
#include<map>
#include<stack>
#include<string>
#include<vector>
using namespace std;
#define INF 100000000
#define maxn 100010
int start[maxn],heap[maxn],object[maxn];
int num;
void downadjust(int index,int end)//小堆
{
//cout<<end<<endl;
 int lchild,rchild;
 int m=index;
 int temp;
 while(m<=end)
 { 
  lchild=2*m;
  rchild=2*m+1;
  if(rchild<=end){
  if(heap[lchild]>=heap[rchild]){
    temp=lchild;
  }
  else
  { temp=rchild;
  }}
  else if(lchild<=end&&rchild>end)
  { temp=lchild;
 // cout<<temp;
  }
  
  if(heap[temp]>heap[m])  {
 swap(heap[m],heap[temp]);
  m=temp;}
  else return;
   } 
}
bool issame(int heap[]){
 for(int i=1;i<=num;i++)
 {
  if(heap[i]!=object[i]) return false;
 }
 return true;
}
void showarray()
{
 for(int i=1;i<=num;i++) {
 
 cout<<heap[i];
 if(i<=num-1) cout<<" ";}
}
void heapsort(){
 bool flag=false;
 for(int i=num/2;i>=1;i--)
 downadjust(i,num);//建堆
// showarray();
 int i;
 for( i=num;i>2;i--)
 {  if(issame(heap)) {
 cout<<"Heap Sort"<<endl;
 flag=true;break;
 }
  swap(heap[1],heap[i]);
  downadjust(1,i-1);
 // showarray();
 }
 swap(heap[1],heap[i]);
  downadjust(1,i-1);
 if(flag) showarray();
}
void insertsort()
{ bool flag=false;
 for(int i=2;i<=num;i++)
 { if(i!=2&&issame(start)) {
 cout<<"Insertion Sort"<<endl;
 flag=true;
 }
 int temp=start[i],j;
 for(j=i-1;j>=1;j--)
 {
 if(start[j]>temp) start[j+1]=start[j];
  else  break;
 }
 start[j+1]=temp;
if(flag) i=num;
 }
if(flag) for(int i=1;i<=num;i++) {
 
 cout<<start[i];
 if(i<=num-1) cout<<" ";}
}
int main()
{ cin>>num;
for(int i=1;i<=num;i++){
cin>>heap[i];
start[i]=heap[i];
}
for(int i=1;i<=num;i++){
cin>>object[i];
}
//if(issame(heap)) return 0; 
heapsort();
insertsort();
return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值