Java中的冒泡排序、选择排序、二分(折半)查找法

冒泡排序

1.实现原理
1.每次比较相邻两数
2.小的交换到前面
3.每轮结束后最大的数交换到最后

2.双重循环实现
1.外层循环:比较多少轮
2.内存循环:每轮比较多少次
3.比较或交换:一共比较n(n-1)/2次得到最终结果

3.代码实现

int[] arr = {2,5,8,6,4,1,0,11,6,5};
//外层循环:比较多少轮
for(int i=0;i<arr.length-1;i++) {
    //内存循环:每轮比较多少次
    for(int j=0;j<arr.length-1-i;j++) {
        if(arr[j]>arr[j+1]) {
            //升序,如果前一个数比后一个数大,则交换到后面
            int temp;
            temp = arr[j];
            arr[j] = arr[j+1];
            arr[j+1] = temp;
        }
    }
}

选择排序

1.实现原理
1.循环比较:下标为i的元素依次和之后的所有元素比较,找到本轮最小(大)的元素
2.交换元素:将最小的元素与下标为i的元素交换比较次数:n(n-1)/2

2.代码实现

int array[] = {15,46,21,5,11};
//外层:比较的轮数
for(int i=0; i<array.length; i++) {
    int minIndex = i;//最小值的下标每轮开始时初始值为i
    //内层:与每一个元素进行比较,找到该轮最小的那一个
    for(int j=i; j<array.length; j++) {
        //如果发现比array[minIndex]小,则将下标赋给minIndex
        if(array[minIndex]>array[j]) {//降序则只需将>修改为<
            minIndex = j;
        }
    }
    System.out.println("第"+i+"轮的最小数下标为:"+minIndex);
    //将当前元素与本轮最小值替换
    int temp = array[i];
    array[i] = array[minIndex];
    array[minIndex] = temp;   
}
System.out.print("升序排序后:"+Arrays.toString(array));

二分(折半)查找法

1.实现原理
1.定义数组(前提是有序)
2.折半比较:将要查找的元素和数组中间的数比较,没找到则继续折半

2.代码实现

Arrays.sort(array);//升序排序,前提是数组已经排好序
if(num>array[array.length-1] || num<array[0]) {
    System.out.print("没有这个数!");
}else if(num==array[array.length-1]){
    //middleIndex永远取不到最后一位
    System.out.print("已找到!下标为:"+(array.length-1));
}else {
    do{
        if(num < array[middleIndex]) {
            endIndex = middleIndex;
            middleIndex = (startIndex +  endIndex)/2;
        }else if(num == array[middleIndex]) {
            System.out.print("找到啦!!"+num+"的下标为:"+middleIndex);
            break;//找到则跳出循环
        }else {
            startIndex = middleIndex;
            //这里middleIndex永远取不到最后一个元素,所以将num等于最后一个元素的情况放在if里面
            middleIndex = (startIndex +  endIndex)/2;
        }
    }while(true);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值