二叉树排序,比选择排序,冒泡排序快很多

*初始化一个长度是100000的随机数字的数组
初始化完毕
接下来分别用3种算法进行排序
选择法排序,一共耗时 15477 毫秒
冒泡法排序,一共耗时 15801 毫秒
二叉树排序,一共耗时 92 毫秒

查看排序结果,是否是不同的数组对象
[I@7d4991ad
[I@28d93b30
[I@1b6d3586

查看排序结果,内容是否相同
比较 选择法 和 冒泡法 排序结果:
true
比较 选择法 和 二叉树 排序结果:
true*

//二叉树的插入和中序遍历所有的节点
public class Node {
//左子节点
public Node leftNode;
//右子节点
public Node rightNode;
//值
public Object value;
//插入数据
public void add(Object v) {
//如果当前节点没有值,就把数据放在当前节点上
if(nullvalue) {
value = v;
}
//如果当前节点有值,就进行判断,新增的值与当前值的大小关系
else {
//新增的值,比当前值小或者相同
if( (Integer)v - (Integer)value <=0 ) {
if(null
leftNode) {
leftNode = new Node();
}
leftNode.add(v);
}else{
//新增的值,比当前值大
if(null==rightNode) {
rightNode = new Node();
}
rightNode.add(v);
}
}
}
//中序遍历所有的节点
public List values(){
List values = new ArrayList<>();
//左节点的遍历结果
if(null != leftNode) {
values.addAll(leftNode.values());
}
//当前节点
values.add(value);
//有节点的遍历结果
if(null != rightNode) {
values.addAll(rightNode.values());
}
return values;
}
public static void main(String[] args) {
int randoms[] = new int[] { 67, 7, 30, 73, 10, 0, 78, 81, 10, 74 };
Node roots = new Node();
for (int number : randoms) {
roots.add(number);
}
//System.out.println(roots.leftNode.rightNode.value);
System.out.println(roots.values());
}
}
//三种排序的代码比较
public class SortCompare {
public static void main(String[] args) {
//初始化随机数
int total = 100000;
System.out.println(“初始化一个长度是”+total+“的随机数字的数组”);
int[] originalNumbers = new int[total];
for (int i = 0; i < total; i++) {
originalNumbers[i] = (int) (Math.random()*total);
}
System.out.println(“初始化完毕”);
System.out.println(“接下来分别用3种算法进行排序”);
//从初始化了的随机数组复制过来,以保证,每一种排序算法的目标数组,都是一样的
int[] use4sort;
use4sort = Arrays.copyOf(originalNumbers, originalNumbers.length);
int[] sortedNumbersBySelection = performance(new SelectionSort(use4sort),“选择法”);

	use4sort = Arrays.copyOf(originalNumbers, originalNumbers.length);
	int[] sortedNumbersByBubbling=performance(new BubblingSort(use4sort),"冒泡法");
    
	use4sort= Arrays.copyOf(originalNumbers, originalNumbers.length);
    int[] sortedNumbersByTree=performance(new TreeSort(use4sort),"二叉树");

    System.out.println("查看排序结果,是否是不同的数组对象");
    System.out.println(sortedNumbersBySelection);
    System.out.println(sortedNumbersByBubbling);
    System.out.println(sortedNumbersByTree);
  
    System.out.println("查看排序结果,内容是否相同");
    System.out.println("比较 选择法 和 冒泡法  排序结果:");
    System.out.println(Arrays.equals(sortedNumbersBySelection, sortedNumbersByBubbling));
    System.out.println("比较 选择法 和 二叉树  排序结果:");
    System.out.println(Arrays.equals(sortedNumbersBySelection, sortedNumbersByTree));
}
interface Sort{
	void sort();
	int[] values();
}
static class SelectionSort implements Sort{
	int numbers[];
	SelectionSort(int[] numbers){
		this.numbers = numbers;
	}
	@Override
	public void sort() {
		for (int i = 0; i < numbers.length; i++) {
			for (int j = i+1; j < numbers.length; j++) {
				if(numbers[j]<numbers[i]){
					int temp = numbers[i];
					numbers[i] = numbers[j];
					numbers[j] = temp;
				}
			}
		}	
	}
	@Override
	public int[] values() {
		return numbers;
	}
}
static class BubblingSort implements Sort{
	int[] numbers;
	BubblingSort(int[] numbers){
		this.numbers = numbers;
	}
	@Override
	public void sort() {
		for (int i = 0; i < numbers.length; i++) {
			for (int j = 0; j < numbers.length-i-1; j++) {
				if(numbers[j]>numbers[j+1]) {
					int temp = numbers[j];
                    numbers[j] = numbers[j+1];
                    numbers[j+1] = temp;
				}
				
			}
		}
	}
	@Override
	public int[] values() {
		return numbers;
	}
}
static class TreeSort implements Sort{
	int numbers[];
	Node n;
	TreeSort(int[] numbers){
		this.numbers = numbers;
		n = new Node();
	}
	@Override
	public void sort() {
		for(int i : numbers ){
			n.add(i);
		}
	}
	@Override
	public int[] values() {
		List<Object> values = n.values();
		int[] sortedNumbers = new int[values.size()];
		for (int i = 0; i < sortedNumbers.length; i++) {
			sortedNumbers[i] = (int)values.get(i);
		}
		return sortedNumbers;
	}
}
private static int[] performance(Sort algorithm, String type) {
	long start = System.currentTimeMillis();
	algorithm.sort();
	int[] values = algorithm.values();
	long end = System.currentTimeMillis();
	System.out.printf("%s排序,一共耗时 %d 毫秒%n",type,end-start);
	return values;
}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值