java中的几种基础排序,查找方法

1:冒泡排序:
public static void main(String[] args){
        int[] array={1,3,7,3,8,4,0,4,3,8,5,6};
        /**
         * 冒泡排序,见名思意就是:每次选择一个数作为目标操作数,和下一个数字比较,选择较大或者较小的往后移位。
         * 总共循环次数,为数组长度-1.
         * 每次比较的次数,又因为每次都将最小数放到最后,下次则不需要再对上次确定的最小数做比较,所以每次的操作数都会递减。
         * 而初次比较的次数为数组元素个数-1
         */
        //从大到小排序 
        for(int i=0;i<array.length-1;i++){  //控制循环次数
            //控制每轮循环的比较次数,没循环一次,找到一个参与比较中的最小数,写下次比较次数减少1个
            for (int k=0;k<array.length-1-i;k++){
                if(array[k]<array[k+1]){    //从大到小排序,其实是找最小数,将最小数往后移位(冒泡)
                    int temp=array[k+1];
                    array[k+1]=array[k];
                    array[k]=temp;
                }
            }
        } 
        //从小到大排序,只是将最大的后移,只需要将上述方法中的比较符号 '<' 变成 '>' .
        for(int i=0;i<array.length-1;i++){  //控制循环次数
            //控制每轮循环的比较次数,没循环一次,找到一个参与比较中的最小数,写下次比较次数减少1个
            for (int k=0;k<array.length-1-i;k++){
                if(array[k]>array[k+1]){    //从大到小排序,其实是找最小数,将最小数往后移位(冒泡)
                    int temp=array[k+1];
                    array[k+1]=array[k];
                    array[k]=temp;
                }
            }
        }
	//循环输出数组元素
        for(int a:array){
            System.out.println(a);
        }
    }

2:二分法查找

public class BinarySearch {
    public static void main(String[] args){
        int[] array={1,3,5,6,7,9,11,22,45,66,89,96,132,435,765,800};
        int[] array_1={999,888,777,66,56,45,34,23,12,9,6,4,2,0};
        int index=getIndex(array,11);
        System.out.println("要查找的数字在数组中的索引为:"+index);
        int index_1=getIndex(array_1,2);
        System.out.println("要查找的数字在数组中的索引为:"+index_1);
    }
    public static int getIndex(int[] array,int num){
        int minIndex=0;
        int maxIndex=array.length-1;
        int midIndex=(minIndex+maxIndex)/2;
        //我们只知道数组是有序的,但并不知道是升序还是降序,首先做判断
        if (array[0]>array[array.length-1]){
            while(num!=array[midIndex]){
                if (array[midIndex]>num){
                    minIndex=midIndex+1;
                }else{
                    maxIndex=midIndex-1;
                }
                midIndex=(minIndex+maxIndex)/2;
            }
        }else{
            while(num!=array[midIndex]){
                if (array[midIndex]>num){
                    maxIndex=midIndex-1;
                }else{
                    minIndex=midIndex+1;
                }
                midIndex=(minIndex+maxIndex)/2;
            }
        }
        return midIndex;
    }

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值