D. DS内排—堆排序
题目描述
给定一组数据,使用堆排序完成数据的降序排序。(建小顶堆)。
输入
数据个数n,n个整数数据
输出
初始创建的小顶堆序列
每趟交换、筛选后的数据序列,输出格式见样例
样例查看模式
正常显示
查看格式
输入样例1 <-复制
8 34 23 677 2 1 453 3 7n
n
输出样例1
8 1 2 3 7 23 453 677 34n
8 2 7 3 34 23 453 677 1n
8 3 7 453 34 23 677 2 1n
8 7 23 453 34 677 3 2 1n
8 23 34 453 677 7 3 2 1n
8 34 677 453 23 7 3 2 1n
8 453 677 34 23 7 3 2 1n
8 677 453 34 23 7 3 2 1
#include#include using namespace std; class node{ public: int val;node *left,*right; node(){ val=0;left= nullptr;right= nullptr; } }; node *root; void pre(node *p){ // int tt=20; while (tt--){ if(p->right)pre(p->right); if(p->left)pre(p->left); if(p->left&&!p->right&&p->val>p->left->val){ int t=p->left->val;p->left->val=p->val;p->val=t; } else if(p->right&&!p->left&&p->val>p->right->val){ int t=p->right->val;p->right->val=p->val;p->val=t; } else if(p->left&&p->right&&p->val>p->left->val&&p->right->val>p->left->val){ int t=p->left->val;p->left->val=p->val;p->val=t; } else if(p->left&&p->right&&p->val>p->right->val&&p->left->val>p->right->val){ int t=p->right->val;p->right->val=p->val;p->val=t; } } } int main(){ int n;cin>>n; node **s=new node*[n]; for (int i = 0; i < n; ++i) { s[i]=new node();cin>>s[i]->val; } int f=0;int r=1; int tt=100; while (tt--){ if(f left=s[r];r++; if(f right=s[r];r++;f++; } } } vector d; int u=n;int nn=n; while (u--){ root=s[0]; pre(root);cout< val<<" "; }cout< val<val<<" "; } } for (int i = d.size()-1; i >=0; --i) { if(i!=0){ cout< val;s[0]->val=s[n-1]->val;s[n-1]->val=t;d.push_back(s[n-1]->val);s[n-1]->val=999;n--; } }
- 很烦的格式处理



