堆排序结果不对

堆排序,结果是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

相关推荐

小红书 后端选手 n*16*1.18+签字费期权
点赞 评论 收藏
分享
点赞 评论 收藏
分享
Yushuu:你的确很厉害,但是有一个小问题:谁问你了?我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了😆
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务