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

来源:互联网 发布:安卓编程文件管理器 编辑:程序博客网 时间:2024/05/22 15:34

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

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;}


1 0
原创粉丝点击