堆排序结果不对

堆排序,结果是999 444 333 84 67 55 5 4 3 -5 3 3 -8 2 -99 ,不知道问题在那里,大家看看

import java.util.Arrays;
import java.util.Scanner;

public class mmm {
    
    static void sort(int []a )
    {
        heap(a,a.length) ;
        int len = a.length ;
        int i = a.length-1;
        
        while(len>0)
        {
            swap(a,0,i) ;
            len-- ;
            i-- ;
            adjust(a,0,len) ;
        
        }
    }
    
    
    static void adjust(int a[],int i,int len)
    {
        if(i<= len/2-1 && (a[i]>a[i*2] || a[i]>a[i*2+1]) )
        {
            int index ;
            if(a[i*2]<a[i*2+1])
                index = i*2 ;
            else
                index = i*2+1 ;
            
            swap(a,i,index) ;
            adjust(a,index,len) ;
    
        }
    }
    
    static void swap(int []a,int i,int j)
    {
        int t = a[i] ;
        a[i]= a[j] ;
        a[j]=t ;
    }
    
    static void heap(int []a ,int len)
    {
        for(int i= len/2-1 ;i>=0 ;--i)
        {
            if(a[2*i]<a[i])
                swap(a,i,2*i) ;
            if(a[i]>a[2*i+1])
                swap(a,i,2*i+1) ;
        }
    }
    
    
    
    public static void main(String [] argv)
    {
        
        int [] a = {2,3,3,444,5,-8,4,3,999,-5,67,84,55,-99,333} ;
        
        int len = a.length ;
        
        sort(a) ;
        
        for(int i=0 ;i<a.length ;++i)
            System.out.print(a[i]+" ");
        
    }

}

全部评论
adjust函数写错了,如果长度为偶数没什么问题,奇数就有问题了。边界的判断应该通过孩子节点是否超出范围来判断
点赞 回复 分享
发布于 2017-11-09 19:43
你可以自己先debug一下看看
点赞 回复 分享
发布于 2017-11-09 14:47

相关推荐

点赞 评论 收藏
分享
勇敢的联想人前程似锦:如果我是你,身体素质好我会去参军,然后走士兵计划考研211只需要200多分。
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-24 20:55
阿里国际 Java工程师 2.7k*16.0
程序员猪皮:没有超过3k的,不太好选。春招再看看
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务