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

来源:互联网 发布:在淘宝上买衣服的技巧 编辑:程序博客网 时间:2024/04/28 06:18

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;
    }

}


原创粉丝点击