堆排序结果不对

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

相关推荐

01-17 18:15
已编辑
门头沟学院 前端工程师
从上午约我面试然后他迟到,然后中午发消息打电话给我说重约面试时间,我就该意识到。【管理不规范,只是这家公司最小的问题】他妈一个不是技术的人来给我技术面。。。连vvue什么?连react是什么?连普通的HTTP请求是什么?这些东西都不懂的人来给我做技术面,我真的。。。。他妈浪费我40分钟。。一天面了三场,这家公司属实牛逼。不停的问我说上班下班时间谁来派任务公司在哪个区发展怎么样,公司的管理模式什么样,培养机制怎么样带教负责什么。如果出bug了谁来负责。我真的求你了别闹了。我答了15分钟,我已经很不想回答了。然后他就问了我一些很招笑的面试问题。问我前端框架架构设计怎么设计,Websocket可以实现SSE吗??最后还要我硬说,为什么我们公司没转正?为什么?为什么?我说我怎么知道。。这是领导决定,又不是我决定,他说让我分析一下。。。我真的草了,这个人是来搞我的吗?我最后问我说这个没有技术面,他说他就是技术面虽然我今天面的另外两家也很逆天。一个人不停的吹牛,自己100人的公司是全国前几,吹牛了一个小时。我中途几次想跑,真的是底下玩手机在听他那吹牛。。然后最后来了句说,我承诺的东西要实现哦,不然的话,公司会追责的,我我请问我承诺了什么?从头到尾也没有说让我承诺什么。而且我只是作为一个小小的前端卡拉咪,应届生。我要承担什么??好崩溃。。好崩溃的,一天面了三场。两家1000-9999的公司。面试官问的都很傻逼,甚至有些东西我问他估计都答不出来。。&nbsp;我这是在干嘛呀?浪费我一天的时间,我的奶奶。。我本来是抱着说我很菜,我要面试中发现自己的问题,现在来看他妈的这三场面试,面试本身就是问题。。
点赞 评论 收藏
分享
01-15 13:45
门头沟学院 Java
牛客92772631...:boss招聘挂岗位是要花钱的,花了钱不挂白不挂,别那么焦虑,但是也要做好跳槽的准备
找实习记录
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务