数组高级(排序和查找)

数组高级(排序和查找)

排序

冒泡排序:
相邻元素两两比较,大的往后放。第一次完毕后,最大值就出现在了最大索引处。同理,继续,即可得到一个拍好序的数组。
这里写图片描述

public static void main(String[] args){
    //定义数组
    int[] arr = {24,69,80,57,13};
    System.out.pritnln("排序前:");
    printArray(arr);
    //第一次比较
    //arr.length-1是为了防止越界
    //arr.length-1-0是为了减少比较的次数
    //for(int x = 0 ;x<=arr.length-1-0;x++){
    //  if(arr[x]>arr[x+1]){
    //      int temp =arr[x];
    //      int[x]=arr[x+1];
    //      arr[x+1]=temp;
    //  }
    //}
    System.out.println("第一次比较后");
    bubbleSort(arr);
}
//遍历功能
public static void printArray(int[] arr){
    System.out.pritnln("[");
    for(int x=0;x<arr.length;x++){
        if(x==arr.length-1){
            System.out.pritnln(arr[x]+"]"); 
        }else{
            System.out.print(arr[x]+", ");
        }
    }
}
public static void bubbleSort(int[] arr){
    for(int x =0;x<=arr.length-1;x++){
        for(int y =0;y<arr.length-1-x;x++){
            for(arr[y]>arr[y+1]){
                int temp = arr[y];
                arr[y]=arr[y+1];
                arr[y]=temp;
            }
        }
    }
}

选择排序:
从0索引开始,依次和后面元素比较,小的往前放,第一次完毕,最小值出现在最小索引处。
这里写图片描述

public static void selectSort(int[] arr){
    for(int x=0;x<arr.length-1;x++){
        for(int y=x+1;y<arr.length;y++){
            if(arr[y]<arr[x]){
                int temp =arr[x];
                arr[x]=arr[y];
                arr[y]=temp;
            }   
        }
    }
}

二分查找

基本查找:数组元素无序(从头找到尾)
二分查找(折半查找):数组元素必须有序
这里写图片描述

public static int getIndex(int[] arr,int value){
    //定义最大索引,最小索引
    int max = arr.length-1;
    int min=0;

    //计算出中间索引
    int mid =(max+min)/2;
    //拿中间索引的值和要查找的值进行比较
    while(arr[mid] != value){
        if(arr[mid]>value){
            max=mid-1;
        }else if(arr[mid]<value){
            min = mid + 1;
        }
        //加入判断
        if(min>max){
            return -1;
        }
        mid = (max+min)/2;
    }
    return mid;
}

注意事项:
无序数组不能进行二分查找,如果先排序后二分查找,已经把元素原始的索引位置改变了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值