二叉树极速排序算法-Java版

相比选择排序、插入排序、冒泡排序、希尔排序、堆排序、快速排序等算法,二叉排序既稳定有快速,特别是在数据庞大排序的时候,更能凸显它的优势。主要利用二叉树的特性进行排序,以随便一个数作为头部,然后遍历一遍所有的数据,当小于此值且有左分支时,继续下一个左分支作比较,直到当小于此值且该支没有左分支时添加一左分支,同理,当大于此值且有右分支时,继续下一个右分支作比较,直到当大于此值且没有右分支时添加一右分支,最后形成一个(左-中-右)的取值数状排序,具体实现如下:

public static void tree(int[] data){
		long startTime,endTime;
		int size = data.length;
		int start = 0;
		int[][] treeCur = new int[size][4];
		int index;
		startTime = System.nanoTime();
		treeCur[start][1] = data[start];//顶部
		while(start < size){
			index = 0;
			while(index < start){
				if(treeCur[index][1]>data[start]){//小于
					if(treeCur[index][0] == 0) {
						treeCur[start][1] = data[start];
						treeCur[index][0]=start;
						break;
					}
					else index = treeCur[index][0];
				}
				else if(treeCur[index][1]<data[start]){//大于
					if(treeCur[index][2] == 0) {
						treeCur[start][1] = data[start];
						treeCur[index][2]=start;
						break;
					}
					else index = treeCur[index][2];
				}
				else{//等于
					treeCur[index][3]++;
					break;
				}
			}
			start ++ ;
		}
		endTime = System.nanoTime();
		jiexi(treeCur,0,data,0);//获取排序的数据到data数组中
		System.out.print("排序后是:");
		for(int va:data){
			System.out.print(va+" ");
		}
		System.out.println();
		System.out.println("排序使用时间:"+(endTime-startTime)+" ns");
	}
	public static int jiexi(int[][] treeCur,int cur,int[] data,int index){
		if(treeCur[cur][0] != 0)
			index = jiexi(treeCur,treeCur[cur][0],data,index);
		while(treeCur[cur][3]>=0){
			data[index] = treeCur[cur][1];
			index++;
			treeCur[cur][3]--;
		}
		if(treeCur[cur][2] != 0)
			index = jiexi(treeCur,treeCur[cur][2],data,index);
		return index;
	}


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值