数组笔记整理

数组

1.数组的定义

2.数组常见格式

3.数组其他格式

4.数组常见问题

5.数组中寻找最值及三目运算符的使用

6.数组中的两个算法

​ 6.1冒泡排序

​ 6.1.1命名由来

​ 6.1.2原理

​ 6.1.3具体代码

​ 6.2二分查找

6.2.1概述

​ 6.2.2 原理

​ 6.2.3 具体代码

1.数组的定义

数组是相同数据类型的多个数据的容器。
这些元素按线性顺序排列。所谓线性顺序是指除第一个元素外,每一个元素都有唯一的前驱元素;
除最后一个元素外,每一个元素都有唯一的后继元素。(就是一个一个的按顺序排列)

2.数组常见格式

public class Arrayformat {
	public static void main(String[] args) {
		//创建数组的格式
		//常用格式1:创建数组的同时,制定数组的内容
		//  数据类型[] 数组名称 = {数据1,数据2,数据3...数据n};
		int[] ages = {10,11,12,13,14};
		//常用格式2:创建数组,并指定长度,不指定数组中的内容。
		// 数据类型[]  数组名称 = new 数据类型[数组长度];
		//  数组长度通过int数据指定
	    int[] ages2 = new int[10];
        
        /*
	    int[] str = new int[11];     //创建了定义长度的数组
	    str[2] = 1;				     //给该数组的第三个元素赋值
	    System.out.println(str[2]);  //得到该数组的第三个元素的值
	    int L = str.length			 //得到数组长度
	    */
	    
	    //通过下标操作数组数据的方式:
	    //1.   给数组某个下标赋值: 数组名称[下标] = 值;
	    ages[0] =100;
	    //2.   从数组某个下标取值: 数组名称[下标]
	    System.out.println(ages[0]);
	    ages2[0] = 99;
	    System.out.println(ages2[0]);
	    
	    System.out.println("------------------");
	    
	    //如何获取数组长度: 数组名称.length 
	    //数组的遍历
	    for(int index=0;index<ages.length;index++) {
	    	//index: 0 1 2 3 4
	    	System.out.println(ages[index]);
	    }
	    
	}

}

3.数组其他格式

public class Arrayformat1 {
	public static void main(String[] args) {
		// 数组不常用的创建方式:
		//1.  创建数组,不初始化
		//格式: 数据类型[] 数组名;
		int[] nums;
		//2. 创建数组,并指定数组中的内容
		//格式: 数据类型[] 数组名称 = new 数据类型[]{内容1,内容2,内容3...内容n};
		int[] ages = new int[] {11,12,13,14};
	
	}

}

4.数组常见问题

public class Arrayproblem {
	public static void main(String[] args) {
		// 常见问题:
		// 1. 数组下标越界问题(下标从零开始):
		/*int[] nums = {10,11,12,13,14};
		              // 0  1  2  3  4
		System.out.println(nums[5]);//此时下标为5的元素不存在,会导致后面的程序崩溃
	    */
		
		// 2. 空指针问题
		int[] nums = null;
		System.out.println(nums);
		
	}

}

5.数组中寻找最值及三目运算符的使用

public class searchnum {
		//寻找数组中的最大值 | 最小值
 public static void main(String[] args) {
	int[] nums = {10,11,14,56,89,32,0,300,-99};
	int n=nums[0];
	int m=nums[0];
	for(int i=1;i<nums.length;i++) {
	  n= n>nums[i]?n:nums[i];//三目运算符 比较n和第i个数组元素大小,若n大为n,反之为该元素
	  m= m<nums[i]?m:nums[i];//三目运算符 比较m第i个数组元素大小,若m小为m,反之为该元素
	  }
        System.out.println("最大值是"+n);
        System.out.println("最小值是"+m);
  }

}

6.数组中的一些算法

6.1冒泡排序

6.1.1命名由来:

最小(或最大)的元素会经由交换慢慢“浮”到数列的顶端(降序或升序), 就如同水中的气泡最终会上浮到顶端一样,故名“冒泡排序”。

6.1.2原理:

​ 比较相邻的元素。如果第一个比第二个大,就交换他们两个。

​ 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会
是最大的数。

​ 针对所有的元素重复以上的步骤,除了最后一个。

​ 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

​ 升序排列的口诀:

​ N个数字来排队,两两相比小靠前.外层循环length-1,内层循环length-i-1

​ 降序排序的口诀:

​ N个数字来排队 ,两两相比大靠前.外层循环length-1,内层循环length-i-1

6.1.3具体代码:
public class BubbleSorting {
	//用冒泡排序的方法实现数组的排序
	public static void main(String[] args) {
		int[] nums = {25,32,54,11,1,56};		
		// 外层循环控制的是,比较的轮数。
		//外层循环次数:length-1
		for(int i=0;i<nums.length-1;i++) {
			//内层循环控制的是,每轮比较次数
			//第i轮(i从0开始计算),比较次数为:length-i-1
			for(int j=0;j<nums.length-i-1;j++) {
				if(nums[j]>nums[j+1]) {
					//俩俩相比,满足移动条件
					int 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]);
		}
		
	}

}

6.2二分查找

6.2.1 概述:

​ 二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,二分查找要求数组数据必须采用顺序存储结构有序排列。

6.2.2原理(假设升序排列):

​ 1.确定查找范围: 最小下标到最大下标
​ 2.计算中间下标: (最小+最大)/2
​ 3.比较中间下标数据: 中间数据较大,则最大下标等于中间下标—1;
​ 中间数据较小,则最小下标等于中间下标+1.
​ 4.当最小下标大于最大下标时,说明数据是不存在的。

6.2.3具体代码:
public class binarysearch{
//二分查找的前提是该数组是按大小顺序排列
	public static void main(String[] args) {
		int[] nums = {10,20,30,40,50,60,70,90,10};
		//输入要查找的数据
		Scanner input= new Scanner(System.in);
		System.out.println("请输入要查找的数字:");
		int num =input.nextInt();
	
		//最小范围下标
		int minIndex = 0;
		//最大范围下标
		int maxIndex = nums.length-1;
		//中间数据下标
		int centerIndex =(minIndex+maxIndex)/2;
		while(true) {
			System.out.println("循环了一次");
			if(nums[centerIndex]>num) {
				//中间数据较大
				maxIndex = centerIndex-1;
			}else if(nums[centerIndex]<num) {
				//中间数据较小
				minIndex = centerIndex+1;
			}else {
				//找到了数据,数据位置:centerIndex
				break;
			}   //当输入错误时,将中间指针赋值为-1
			if(nums[minIndex]>nums[maxIndex]) {
				centerIndex=-1;
				break;
			}
			//当边界发生了变化,需要更新中间下标
			centerIndex = (minIndex+maxIndex)/2;
		}
		System.out.println("位置:"+centerIndex);
	}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值