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

来源:互联网 发布:淘宝分销货源平台 编辑:程序博客网 时间:2024/05/29 15:09
点击打开pat链接
#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;
}
原创粉丝点击