Java基础知识——数组、冒泡排序和二分查找

数组与冒泡排序和二分查找

1、数组(一维数组)

可存储多个相同类型的数据的集合,在内存中是一段连续的内存地址

  • 数组的创建

    //数据类型[] 数组名称 = {数据1,数据2,...,数据n};
    int[] nums = {1,2,3,4,5,6};
    
    //数据类型[] 数组名称 = new 数据类型[数组长度];
    int nums = new int[10];
    
    //不常用创建方式
    int nums = new imt[]{1,2,3,4,5};
    
  • 数组的操作

    查询:

    //通过下标对具体的数据进行操作
    int[] nums = {1,2,3,4,5};
    //数组的下标从0开始
    System.out.println(nums[0]);	//输出结果为1
    

    遍历:

    int[ nums = {1,2,3,4,5};
    for(int index=0;index<nums.length();index++){
        System.out.println(nums[index]);	//1,2,3,4,5
    }
    
  • 注意的点:

    问题一:创建错误
    -------------------------------------------------------------
    	//易错数组创建方式演示
        int[] nums;		//定义但为初始化
        nums = {1,2,3,,4,5};	//该初始化方式只能在定义的时候才能使用
        //上述解决办法
        int[] nums;
        nums = new int[5];
    -------------------------------------------------------------
    问题二:空指针与数组越界
    
      	//空指针
      	int[] nums;
      	System.out.println(nums[0]);	//此时会提示空指针异常
      	//下标越界
      	int[] nums = {1,2,3,4,5};
    	System.out.println(nums[5]);	//下标为5表示第六个数,而数组只有5个数,超出数组范围
    

2、Java冒泡排序

顾名思义,排序即按照从小到大或从大到小的顺序排,冒泡即在形容排序时数据位置的变化,数组中最大的(或最小的)数移动到数组的一端,将数组纵向来看便像是”冒泡“。

冒泡排序代码示例:

public class Demo01 {
   
	public static void main(String[] args) {
		int[] nums = {14,22,16,78,30,55,1};
		int temp = 0;	//作为中间变量,用于交换数组中两个相邻的数据
		for(int i=0;i<nums.length-1;i++) {	//减1的原因是因为每次循环的交换次数比数组长度少1
			for(int j=0;j<nums.length-1-i;j++) {	//随着外层循环次数增加,内层循环次数逐渐减少
				if(nums[j]>nums[j+1]) {
					temp = nums[j];
					nums[j] = nums[j+1];
					nums[j+1] = temp;
				}
			}
		}
		
       //循环遍历数组
		for(int i=0;i<nums.length;i++) {
			System.out.println(nums[i]);
		}
	}
}

3、Java二分查找(折半查找)

举个例子,类似于一个猜数字的小游戏:在0-100之间让你猜一个确定的数字,在每次猜完后只有三种回答:大了、小了、猜对了。比方说确定的数字是78,第一次猜一般是猜(0-100)中间的数——50,不管是否正确,至少可以排除掉一半的错误答案,收到的回答是小了,第二次继续猜(50-100)中间的数——75,以此类推,第三次猜(75-100)——87,第四次猜(75-87)——81,第五次猜(75-81)——78。查找完毕!显而易见,在上面的例子中在100个数据中查找一个数据用二分法只需要5次,如果按照顺序查找,平均(正序和逆序)要查找50次;因此在面对一些量比较大的数据时,使用二分查找要更好。

  • 前提条件:

    • 数组需要是有序的

    • 必须使用线性表的顺序存储结构来存储数据

  • 方法原理

    • 需要的变量:
      1. 范围两端的位置下标(上界和下界)
      2. 中间值的位置下标
    • 步骤概述:
      1. 每次将所要查询的数据与中间的值进行比较
      2. 根据上一步的结果移动上界或者下界的位置
    • 可能遇到的情况:
      1. 当下界高于上界时,说明没有这个数据
      2. 当中间值与所要查询的数据一致时,说明已查询到
  • 代码实现:

    public class Demo02 {
    
    	public static void main(String[] args) {
    		int[] nums = {1,2,3,4,5,6,7,8,9,10};
    		int num = 9;	//所要查找的值
    		
    		//初始化的上下界
    		int minIndex = 0;
    		int maxIndex = nums.length-1;
    		int centerIndex = (minIndex + maxIndex)/2;
    		
    		while(true) {
    			if(nums[centerIndex] > num) {			//中间数大了
    				maxIndex = centerIndex-1;
    			}else if(nums[centerIndex] < num) {		//中间数小了
    				minIndex = centerIndex+1;
    			}else {								  //中间数不大不小,找到了!!!
    				break;
    			}
    			
    			if(minIndex > maxIndex) {			   //没找到,返回-1
    				centerIndex = -1;
    				break;
    			}
    			
    			centerIndex = (minIndex + maxIndex)/2;
    		}
    		System.out.println(centerIndex);
    	}
    }
    

4、多维数组

通俗的说是数组中存放数组

  • 多维数组的创建

    以二维数组为例:

    0,00,10,20,30,40,5
    1,01,11,21,31,41,5
    2,02,12,22,32,42,5
    3,03,13,23,33,43,5

    代码实现:

    int[][] nums = new int[4][6];	//如上图所示,定义了一个4行5列的二维数组
    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

生命中有太多不确定

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值