置换选择排序
来源:互联网 发布:ubuntu 制作deb安装包 编辑:程序博客网 时间:2024/06/05 11:03
置换选择排序
描述
给定初始整数顺串,以及大小固定并且初始元素已知的二叉最小堆(为完全二叉树或类似完全二叉树,且父元素键值总小于等于任何一个子结点的键值),要求利用堆实现置换选择排序,并输出第一个顺串。例如给定初始顺串29,14,35,13,以及堆(记为16 19 31 25 21 56 40), 置换选择排序得到的第一个顺串为16 19 21 25。
第二行包含m个整数,即初始顺串
第三行包含n个整数,即已经建好的堆的元素(有序,按照从堆顶到堆底,从左到右的顺序)
4 729 14 35 1316 19 31 25 21 56 40样例输出
16 19 21 25参考代码:
#include <stdio.h>#include<iostream> using namespace std;int m,size;int str[1001];int A[1001];class MinHeap { // 最小堆ADT定义public:int * heapArray; // 存放堆数据的数组 int CurrentSize; // 当前堆中元素数目 int MaxSize; // 堆所能容纳的最大元素数目 void BuildHeap(); // 建堆 MinHeap(int* array,const int n); // 构造函数,n为最大元素数目 void SiftDown(int left); // 筛选法};void MinHeap::SiftDown(int position) {int i=position; //标识父结点int j=2*i+1; //标识关键值较小的子结点int temp=heapArray[i]; //保存父结点while (j<CurrentSize){ //过筛 if ((j<CurrentSize-1)&&(heapArray[j]>heapArray[j+1])) j++; //j指向数值较小的子结点 if (temp>heapArray[j]){ heapArray[i]=heapArray[j]; i=j; j=2*j+1; //向下继续 } else break;}heapArray[i]=temp;}void MinHeap::BuildHeap() {for (int i=CurrentSize/2-1; i>=0; i--) //反复调用筛选函数SiftDown(i);} MinHeap::MinHeap(int *array,const int n) {CurrentSize=n;MaxSize=n; //初始化堆容量为nheapArray=new int [MaxSize]; //创建堆空间for(int i=0;i<n;i++){heapArray[i] = array[i];}BuildHeap(); //此处进行堆元素的赋值工作}void replacementSelection(int *A){//建立最小值堆MinHeap H(A,size);int last = size-1;int len = m<last? m:size;for(int i=0; i<len; i++){cout<<H.heapArray[0]<<" "; //堆的最小值if(str[i]>=H.heapArray[0]) H.heapArray[0] = str[i];else {//否则用last位置记录代替根结点,把r放到lastH.heapArray[0] = H.heapArray[last];H.heapArray[last] = str[i];H.CurrentSize--;last--;} if (last!=0) H.SiftDown(0); //堆调整 }}int main(){cin>>m>>size;int i;for(i=0;i<m;i++){cin>>str[i];}for(i=0;i<size;i++)cin>>A[i];replacementSelection(A);return 0;}
0 0
- 置换-选择排序
- 置换-选择排序
- 置换-选择排序
- 置换选择排序
- 置换选择排序
- python算法--置换选择排序详细实现
- 选择置换+败者树搞定外部排序
- 选择置换+败者树搞定外部排序
- C++代码,数据结构-外部排序-置换-选择排序
- 第十一章(2).置换—选择排序
- 7.7.4 置换选择排序(生成初始归并段)
- C++外部排序(选择置换+败者树)
- 数据结构与算法习题 replacement selection sort(置换选择排序)
- 外排序-置换选择排序,赢者树,败者树
- 原地置换排序
- 看数据结构写代码(67) 置换 _ 选择排序(完结篇)
- 第16周外部排序【项目-1】置换-选择算法模拟
- 3270 Cow Sorting //利用置换排序
- EasyUI 之datagrid 使用
- USES_CONVERSION 害得我好苦
- #pragma comment(lib, "XXX.lib") 静态库
- Swift入门教程17-协议(二)
- Oracle Global Finanicals Technical Reference(一)
- 置换选择排序
- 监听android的Home键
- Unix timestamp 格式化显示问题
- http和socket之长连接和短连接区别
- 第16周项目项目4-为动态数组扩容
- Cracking the coding interview--Q9.7
- 第16周项目2-用指针玩转字符串-(2.1)去除特定字符
- 获取10个1-20之间的随机数,要求不能重复
- hdu_1175_BFS+剪枝_用转弯次数来限定