比较二叉树排序,选择排序和冒泡排序的效率

先看下结果:

代码如下:

import java.util.ArrayList;

public class Node {
	private Integer node;// 节点的值,即处于该节点的Hero对象
	private Node leftNode;// 左子节点
	private Node rightNode;// 右子节点
	
	public void addNode(int h) {
		if(node==null) node=h;// 如果当前节点没有值,就把数据放在当前节点上
		else {
			if(node>=h) {// 新增的值,比当前值小或者相同
				if(leftNode==null) leftNode=new Node();
				leftNode.addNode(h);
			}else {// 新增的值,比当前值大
				if(rightNode==null) rightNode=new Node();
				rightNode.addNode(h);
			}
		}
	}
	
	public ArrayList<Integer> values(){
		ArrayList<Integer> al=new ArrayList<Integer>();
		if(rightNode!=null) {
			al.addAll(rightNode.values());
		}
		al.add(node);
		if(leftNode!=null) {
			al.addAll(leftNode.values());
		}
		return al;	
	}
	
	public static void main(String[] args) {
		int n=100000;
		Node ht=new Node();
		int[] numList=new int[n];
		System.out.println("对"+n+"个整数进行倒序排序\n");
		
		/*
		 * 二叉树排序法
		 */
		long start =System.currentTimeMillis();
		for(int i=0;i<n;i++) {
			numList[i]=(int) (Math.random()*1000);
			ht.addNode(numList[i]);
		}
		//System.out.println(ht.values());//打印结果
		long end=System.currentTimeMillis();
		System.out.println("二叉树排序法共花费:"+(end-start)+"ms\n");
		
		/*
		 * 冒泡排序法
		 */
		int[] nl1=numList;
		for(int i=0;i<n;i++) {
			for(int j=0;j<n-i-1;j++) {
				if(nl1[j]<nl1[j+1]) {
					nl1[j]=nl1[j]+nl1[j+1];
					nl1[j+1]=nl1[j]-nl1[j+1];
					nl1[j]=nl1[j]-nl1[j+1];
				}
			}
		}
		/*for(int j:nl1) {//打印结果
			System.out.print(j+" ");
		}
		System.out.println();*/
		start=System.currentTimeMillis();
		System.out.println("冒泡排序法共花费:"+(start-end)+"ms\n");
		
		/*
		 * 选择排序法
		 */
		int[] nl2=numList;
		for(int i=0;i<n-1;i++) {
			for(int j=i+1;j<n;j++) {
				if(nl2[i]<nl2[j]) {
					nl2[i]=nl2[i]+nl2[j];
					nl2[j]=nl2[i]-nl2[j];
					nl2[i]=nl2[i]-nl2[j];
				}
			}
		}
		/*
		for(int j:nl2) {//打印结果
			System.out.print(j+" ");
		}
		System.out.println();*/
		end=System.currentTimeMillis();
		System.out.println("选择排序法共花费:"+(end-start)+"ms\n");
	}
	
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值