0
点赞
收藏
分享

微信扫一扫

排序、二分法

爱喝酒的幸福人 2022-01-06 阅读 71

1.排序

排序就是指让保存的元素按照一定的规则进行存储

比如成绩按降序排序,班级前三名,就取前三个数据就行

1.1 冒泡排序

  

1.2 选择排序

public static void selectSort(int[] arr) {
            int count = 0;
            int change = 0;
            for (int current = 0; current < arr.length - 1; current++) {
                // 假设 当前这个元素 就是最小的
                int min = current;
                // current+1 是因为 自己没有必要和自己比较
                for (int i = current + 1; i < arr.length; i++) {
                    count++;
                    // 判断是否有其他元素比min还小的
                    if (arr[min] < arr[i]) {
                        // 如果有 就把这个比min还小的元素下标,赋值给min
                        min = i;
                        change++;
                    }
                }
                // 判断 当前current元素 是否是最小的
                if (min != current) {
                    // 如果第一个元素不是最小的,就让该元素和最小的元素换位
                    int temp = arr[current];
                    arr[current] = arr[min];
                    arr[min] = temp;
                }
            }
            System.out.println("选择排序完成,执行"+count+"次,换位"+change+"次");
        }

2.查找元素

1.查找数据,比如在一堆数据中要找到某一个并返回其索引,未找到返回-1

返回值为boolean;真就是true 假就是false

返回数字:比如返回索引,能找到就返回索引,找不回就返回-1

引用类型:真就是对象,假就是null

2.1 顺序查找

 2.2  二分查找

//二分查找 又称为折半查找  需求数据有序
public static int binarySearch(int arr[], int target){
    int count=0;
//    1.确定开始和结束还有中间数据
    int startIndex=0;
    int endIndex=arr.length-1;
    int m=(startIndex+endIndex)/2;
//循环比较
while(startIndex<=endIndex){
    count++;
//    如果目标数据等于中间数据,返回中间数据的索引即可
    if(target==arr[m]){
        System.out.println("執行了"+count+"次");
        return m;
        
    }
//    如果目标数据大于中间数据的话,则在后半段继续查找,起始=中间+1,结束不变,再生成中间数据
    if(target>arr[m]){
        startIndex=m+1;
    }else {
//        如果小于,则取前半截,起始不变,结束=中间-1,再生成中间数据
            endIndex=m-1;
        }
//    生成中间数据
m=(startIndex+endIndex)/2;    
}
//能执行到这里,说明不存在
System.out.println("执行了"+count+"次");
return -1;
    }

举报

相关推荐

0 条评论