数据结构之顺序村村存储二叉树遍历及堆排序

static    int[]  arr=new int[]{3,5,2,5,67,7,3,8};
    public static void frontShow(int index){
        if(arr==null||arr.length==0){
            return;
        }
        System.out.println(arr[index]);
        //查询左节点2N+1
        if(2*index+1<=arr.length-1){
            frontShow(2*index+1);
        }
        //查询右节点
        if(2*index+2<=arr.length-1){
            frontShow(2*index+2);
        }
    }
    public static void maxHeap(int[]arr, int size,int index){
        int leftIndex=2*index+1;
        int rightIndex=2*index+2;
        int max=index;
        if(leftIndex<size&&arr[max]<arr[leftIndex]){
            max=leftIndex;
        }
         if(rightIndex<size&&arr[max]<arr[rightIndex]){
            max=rightIndex;
        }
         if(max!=index){
             arr[max]=arr[max]^arr[index];
              arr[index]=arr[max]^arr[index];
              arr[max]=arr[max]^arr[index];
             maxHeap(arr,size,max);
         }
    }
    public static void heapSort(int ... arr){
        int index=(arr.length-1)/2;
        for(int i=index;i>=0;i--){
            maxHeap(arr,arr.length,i);
        }
        for(int i=arr.length-1;i>=0;i--){
            if(arr[0]>arr[i]){
                arr[0]=arr[i]^arr[0];
                 arr[i]=arr[0]^arr[i];
                 arr[0]=arr[i]^arr[0];
            }
            maxHeap(arr,i,0);
        }
    }
    public static void main(String[] args) {
        frontShow(0);
        heapSort(arr);
        System.out.println(Arrays.toString(arr));
    }

猜你喜欢

转载自www.cnblogs.com/sunjinwei/p/12597280.html