0
点赞
收藏
分享

微信扫一扫

二分查找,冒泡、选择、插入排序

源码之路 2022-01-08 阅读 41

目录

二分查找

冒泡排序

选择排序

插入排序


二分查找

public static int binary_Search(int[] a, int target){
        int low=0;
        int high=a.length-1;
        while(low<=high){ //若是最大最小值交叉了,说明找不到
            int mid=(low+high)/2;
            if(a[mid]==target)
                return mid;
            else if(a[mid]>target)
                high=mid-1; //最大值变成中位数上一位
            else
                low=mid+1; //最小值变成中位数下一位
        }
        return -1;
    }

冒泡排序

static int[] bubble_Sort(int[] a){
        int temp;
        for (int i=0; i<a.length; i++)
            for (int j = 0; j < a.length-i-1; j++) {
                if (a[j]>a[j+1]){
                    temp=a[j];
                    a[j]=a[j+1];
                    a[j+1]=temp;
                }
            }
        return a;
    }

选择排序

public static int[] selection_Sort(int[] a){
        for (int i = a.length-1; i>0 ; i--) {
            int indexMax=0; //相比冒泡不用每次都交换,只是最后把找出来的最大值和天花板值交换
            int max=a[0];

            for (int j = 0; j <=i; j++) { //找出第n大的值(n=1,2,3。。。)
                if (a[j]>max){
                    indexMax=j;
                    max=a[j];
                }
            }

            int temp=a[i]; //只交换了一次
            a[i]=max;
            a[indexMax]=temp;
        }
        return a;
    }

插入排序

public static int[] insert_Sort(int[] arr) {
        for (int i = 1; i < arr.length; i++) { //好比在打牌时理顺序,分左边理好的队列和右边没理好的;
            int temp=arr[i]; //将没理好的、最左边的牌先保存
            int index = i; //理好的牌从右往左,找到待插入位置的索引值
            for (int j = i; j >0&&arr[j-1]>temp; j--) { //然后从右往左比较理好的队列,移动的同时,找到合适插入位置
                    arr[j]=arr[j-1];
                    index--;
            }
            arr[index]=temp;
        }
        return arr;
    }
举报

相关推荐

0 条评论