Java学习摘要--基础语法

本文详细介绍Java中的冒泡排序和二分查找算法。冒泡排序通过重复遍历数组,比较并交换相邻元素实现升序或降序排列。二分查找则在已排序数组中高效查找指定元素,适用于大型数据集。

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

Java基础语法–冒泡排序

/*
冒泡排序
原理:
- 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
- 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这之后,最后的元素应该是最大的数。
- 针对所有的元素重复以上的步骤,除了最后一个。
- 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

 升序排列的口诀:
 N个数字来排队 两两相比小靠前,
 外层循环length-1
 内层循环length-i-1

 降序排序的口诀:
 N个数字来排队 两两相比大靠前,
 外层 循环length-1
*/
public class Demo01MaoPao {
    public static void main(String[] args) {
        //定义一个int类型的数组,长度为15,用于存储随机生成的15个int数字
        int[] array = new int[15];
        //使用循环随机生成15个int数字,并将每次生成的数字添加到数组当中
        for (int i = 0; i < array.length; i++) {
            array[i] = new Random().nextInt(100) + 1;
            //随机生成的数字在1-100之间,左右都包括
        }
        //遍历随机数组
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i] + " ");
        }
        //对随机数组进行升序排序
        //外层循环控制一共进行多少轮比较:每轮比较都会产生一个最大值并放在数组末端
        //数组长度为15
        //第1(i = 0)轮比较过后,还剩14个数据需要比较
        //第2(i = 1)轮比较过后,还剩13个数据需要比较
        //...
        //第14轮比较过后,还剩1个数据需要比较        
        //所以外层循环一共进行 array.length - 1 次
        for (int i = 0; i < array.length - 1; i++) {//i从0开始,所以循环次数应该是array.length - 1次
            //内层循环控制每1轮的比较次数
            //第1轮(i = 0),一共有15个数据,需要比较14次 15 - 0 - 1
            //第2轮(i = 1),一共有14个数据,需要比较13次 15 - 1 - 1
            //...
            //第14轮(i = 13),一共有2个数据,需要比较1次 15 - 13 - 1
            //所以内层循环每次循环arry.length - i - 1次
            for (int j = 0; j < array.length - i - 1; j++) {
                //判断进行比较的两个数的大小
                if (array[j] > array[j + 1]) {
                    int temp;
                    //临时存储较大的数据,用于数据的交换
                    temp = array[j];
                    array[j] = array[j + 1];
                    //将较小的数据移动到数组的前端
                    array[j + 1] = temp;
                    //将较大的数据移动到数组的末端
                }
            }
        }
   }                       

Java基础语法–二分查找

import java.util.Random;
import java.util.Scanner;

/*
二分查找
二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。
但是,二分查找要求数组数据 必须采用顺序存储结构有序排列。
首先,假设数组中元素是按升序排列,将数组中间位置的数据与查找数据比较,如果两者相等,则查找成功;
否则利用中间位置记录将数组分成前、后两个子数组,如果中间位置数据大于查找数据,则进一步查找前子数组,否则进一步查找后子数组。
重复以上过程,直到找到满足条件的数据,则表示查找成功, 直到子数组不存在为止,表示查找不成功。
*/
public class Demo02BinarySearch {
    public static void main(String[] args) {
        int[] array = new int[100];
        for (int i = 0; i < array.length; i++) {
            array[i] = new Random().nextInt(100) + 1;
        }    
        //创建一个长度为100的数组,并随机生成15个1-100的整数放入数组内;
        
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i] + " ");
        }
        //遍历随机数组
        
        for (int i = 0; i < array.length - 1; i++) {
            for (int j = 0; j < array.length - i -1; j++) {
                int temp;
                if (array[j] > array[j + 1]) {
                    temp = array[j + 1];
                    array[j + 1] = array[j];
                    array[j] = temp;
                }
            }
        }        
        //将随机数组按照大小升序排序
        
	for (int i = 0; i < array.length; i++) {
            System.out.print(array[i] + "第" + i + "号索引 ");
        }
        //遍历排序好的数组
        
        System.out.println("请输入您想要找的数字!");
        int findNum = new Scanner(System.in).nextInt();
        //获取键盘输入的一个int数字
        int firstIndex = 0;
        //创建一个int数字,用于表示数组的第1号索引
        int lastIndex = array.length - 1;
        //创建一个int数字,用于表示数组的最后一号索引
        int centerIndex = (firstIndex + lastIndex) / 2;
        //创建一个int数字,用于表示数组的中间号索引
        while(true){	
	  if (findNum > array[centerIndex]) {
		firstIndex = centerIndex + 1;
		centerInder = (firstIndex + lastIndex) / 2;
		//如果要找的数字大于中间索引指的数字
		//重新定义1号索引和中间索引
		//将在数组的后半部分找
	    } else if (findnum < array[centerIndex]) {
		lastIndex = centerIndex - 1;
		centerIndex = (firstIndex + lastIndex) / 2;
		//如果要找的数字小于中间索引所指的数字
		//重新定义最后一号索引和中间索引
		//将在数组的前半部分找
	    } else {
	   	System.out.println(""找到了,在第" + centerIndex + "号索引出"");
	   	break;
	   	//找到就break退出循环
	    }
	  if (firstIndex > lastIndex) {
		System.out.println("没有找到");
		break;
		//当出现1号索引大于最后一号索引的时候,说明数组内的元素被排除完了,并没有找到相应的数字
		//此时退出循环
	    }
	}
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值