Java程序设计 二分查找与list的排序

本文介绍了二分查找算法及其实现细节,并提供了两种对Java List进行排序的方法:一种是通过实现Comparable接口来排序;另一种是通过Comparator接口来定义排序规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.二分查找

 

 //二分查找 二分查找关键在于r>=l含有等号
public static int BinarySearch(int[] data,int aim)
{
    int l=0,r=data.length-1;
    while(r>=l) //一定要含等于!!!
    {
        int mid=(l+r)/2;
        if(aim==data[mid])
            return mid;
        else if(aim>data[mid])
            l=mid+1;
        else
            r=mid-1;
        
    }
    return -1;
}

2.两种list的实现方式

  • //方法一:在类中实现Comparable接口  按照data排序

   

 class Node implements Comparable<Node>{
    int data;
    int otherdata;
    public Node(int data,int otherdata)
    {
        this.data=data;
        this.otherdata=otherdata;
    }
    @Override
    public int compareTo(Node arg0) {
        // TODO Auto-generated method stub
        if(this.data<arg0.data)
            return 1;
        else if(this.data==arg0.data)
            return 0;
        else
            return -1;
    }
 }
        ArrayList<Node> list=new ArrayList<Node>();
        list.add(new Node(25,1));
        list.add(new Node(52,2));
        list.add(new Node(1,3));
        list.add(new Node(50,5));
        //方法一:按照data排序 在类中实现接口
        //Collections.sort(list);
  • //方法二:重写Collections.sort的方法  使用Comparator类

//在 Node类种不需要实现Comparable接口

 ArrayList<Node> list=new ArrayList<Node>();
        list.add(new Node(25,1));
        list.add(new Node(52,2));
        list.add(new Node(1,3));
        list.add(new Node(50,5));

Collections.sort(list, new Comparator<Node>(){
            @Override
            public int compare(Node arg0, Node arg1) {
                // TODO Auto-generated method stub
                if(arg1.data>arg0.data)
                    return 1;
                else if(arg1.data==arg0.data)
                    return 0;
                else
                    return -1;
            }    
        });

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值