先看下结果:
代码如下:
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");
}
}