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