排序、二分法

本文介绍了排序算法中的冒泡排序和选择排序,详细讲解了这两种算法的实现过程。同时,探讨了查找算法,包括简单的顺序查找和高效的二分查找,特别是二分查找在有序数据中的应用。通过实例代码展示了算法的执行次数和换位情况,帮助读者深入理解排序和查找的基本原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值