[PAT]1098. Insertion or Heap Sort (25)

来源:互联网 发布:倚天屠龙记结局知乎 编辑:程序博客网 时间:2024/05/16 07:06
#include <iostream>#include <vector>#include <string>#include <stdlib.h>#include <math.h>#include <sstream>#include <map>#include <set>#include <queue>#include <algorithm>using namespace std; void swap(int &a,int &b){int temp = a;a = b;b=temp;}vector<vector<int>> InsertionSort(vector<int> &sq){vector<vector<int>> proc;proc.push_back(sq);for(int i=1;i<sq.size();i++){for(int j=0;j<i;j++){if(sq[i]<sq[j]){ for(int k=i;k>j;k--)swap(sq[k],sq[k-1]);proc.push_back(sq);}}}return proc;}  int main(void){int N;cin>>N;vector<int> seq;vector<int> midseq;for(int i=0;i<N;i++){int temp;cin>>temp;seq.push_back(temp);}for(int i=0;i<N;i++){int temp;cin>>temp;midseq.push_back(temp);} vector<vector<int>> insertseq = InsertionSort(seq);for(int i=0;i<insertseq.size();i++){if(midseq == insertseq[i]){cout<<"Insertion Sort"<<endl;if(i<insertseq.size() -1){for(int k=0;k<insertseq[i+1].size()-1;k++){cout<<insertseq[i+1][k]<<" ";}cout<<insertseq[i+1][insertseq[i+1].size()-1]<<endl;}else{for(int k=0;k<midseq.size()-1;k++){cout<<midseq[k]<<" ";}cout<<midseq[midseq.size()-1]<<endl;}system("pause");return 0;}}cout<<"Heap Sort"<<endl;vector<int> newvec;newvec.push_back(0);int idx;for(int i=1;i<midseq.size();i++){if(midseq[i]>midseq[0]){swap(midseq[0],midseq[i - 1]);idx = i-1;for(int k=0;k<idx;k++)newvec.push_back(midseq[k]);break;}}int k=1;while(1){if(2*k>newvec.size()-1)break;else if(2*k == newvec.size()-1){if( newvec[k]<newvec[2*k]){swap(newvec[2*k],newvec[k]);break;}}else if(2*k+1 == newvec.size()-1 ){if(newvec[k]<newvec[2*k+1]){swap(newvec[2*k+1],newvec[k]);break;}}else{if(newvec[2*k]> newvec[2*k+1]){swap(newvec[2*k],newvec[k]);k = 2*k;}else{swap(newvec[2*k+1],newvec[k]);k = 2*k+1;}}}for(int i=1;i<newvec.size();i++){cout<<newvec[i]<<" "; }for(int i=idx;i<midseq.size()-1;i++){cout<<midseq[i]<<" "; }cout<<midseq[midseq.size()-1]<<endl;system("pause");return 0;} 

0 0