BinarySort(二叉排序算法)
来源:互联网 发布:次元舰队 知乎 编辑:程序博客网 时间:2024/04/29 16:42
#include<iostream.h>void swap(int &a, int &b)//实现a、b两个数据元素的简单交换{int t=a;a=b;b=t;}void swap(int &a, int &b, int &c)//实现三个元素最少交换次数的交换,使得a <= b <= c;其功能实现可由可由三个元素交换的分类讨论中得到{if((a>=b && b>c) || (a>b && b==c)) swap(a, c);else if(a>b && b<c){if(a<=c) swap(a,b);else { swap(a,b); swap(b, c);}}else if(a<b && b>c){if(a<=c) swap(b, c);else { swap(b, c); swap(a, b);}}}void swap(int A[], int a, int b, int c)//此函数实现转换功能,将数组调用简化为简单三个元素的比较交换{swap(A[a], A[b], A[c]);}int sortcheck(int A[], int n)//实现进位,并以返回值表示是否已经完成排序{int check=0;for(int i=0; i+1<n; i+=2){if(A[i]>A[i+1]){ swap(A[i], A[i+1]); check++;}//1步if(i+2<n && A[i+1]>A[i+2]) check++;//2步}return check;}void sort(int A[], int n, int r=1)//实现二叉排序,主要对2步的对应元素排序{//其基本思想是将数组A的地址视作二叉树,通过对二叉树的排序实现功能,使 R <= L <= R 根节点值小于左子树值小于右子树值if(2*r+1<=n){swap(A, r-1, 2*r-1, 2*r);sort(A, n, 2*r);sort(A, n, 2*r+1);swap(A, r-1, 2*r-1, 2*r);//此步为回溯算法,在左右子树子排序完成后对根结点重新排序}else if(2*r==n && A[r-1]>A[2*r-1]) swap(A[r-1],A[2*r-1]);}int Sort(int A[], int n)//此函数用于将排序总体包装方便调用{int count=0;while(sortcheck(A, n))//当排序未完成对1组的排序,{int r=1;sort(A, n, r);//并调用2组排序count ++;}return count;//以count的返回值可知两组排序一起结合工作被调用的次数}void BinarySort(int A[], int n){cout<<endl<<"排序前数组为:"<<endl;for(int i=0; i<n; i++)cout<<A[i]<<" ";cout<<endl;cout<<endl<<"本次排序共经历"<<Sort(A,n)<<"个周期,参与排序排序元素"<<n<<"个"<<endl;cout<<endl<<"排序后数组为:"<<endl;for(i=0; i<n; i++)cout<<A[i]<<" ";cout<<endl;}void main(){int A[35]={34,33,32,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0};BinarySort(A, 35);}排序原理,基于二叉树的回溯排序算法,排序效率和快速排序相当;
0 0
- BinarySort(二叉排序算法)
- 二叉树排序算法
- 排序算法-二叉树排序
- java二叉树排序算法
- java二叉树排序算法
- 经典算法--排序二叉树
- 二叉树 排序 遍历 算法
- 算法-二叉树查找排序
- 排序算法之二叉查找树排序
- 八大排序算法 之 堆排序(二叉树排序)
- java排序算法_009二叉查找树
- 一个简单的二叉树排序算法
- 排序算法系列之二叉查找树
- 二叉树的深度排序算法
- 二叉树后序排序的非递归算法
- C语言二叉排序数算法
- 【数据结构和算法15】二叉树排序
- 数据结构和算法二叉树排序
- jdk-7u3-linux-i586.tar.gz安装
- 32位centos下安装jdk1.7报Permission denied处理方式
- 脚本启动redis
- SpringMVC集成Hibernate分页查询到对象数组问题
- Java EE开发环境搭建
- BinarySort(二叉排序算法)
- 山水与情绪
- redis学习笔记
- elasticsearch中的数据类型
- SQL学习笔记
- 关于DAO模式的心得体会
- Android开源项目之音乐播放器:HideMusicPlayer
- Python_类和装饰器
- js学习笔记