8、数组排序和查找

一、数组

1、为什么需要数组?

  • 为了解决大量同类型数据的存储和使用问题
  • 为了模拟现实世界,更有效地管理和处理数据

2、数组的使用

(1)概念:为一组数据,用于存放多个数据类型的数据

(2)数组的初始化

  • 动态初始化:

    数据类型[] 数组名 = new 数据类型[大小];
    
  • 静态初始化:

    数据类型[] 数组名 = {元素1, 元素2,...,元素n};
    

(3)数组的引用:下标从0开始,表示第一个元素

数组名[下标]

(4)一维数组的要点

  • 为n个变量分配连续的存储空间
  • 所有变量数据类型必须想同(向下兼容——精度高的可以兼容精度低的)
  • 所有变量所占的字节大小必须相等

(5)注意事项

  • 数组创建后,若不初始化,有默认值

image-20211206220824181

  • 使用步骤:声明数组并分配内存——》赋值(初始化)——》使用
  • 下标从0开始,第n个元素的下标为n-1,有效下标为0—(n-1)
  • 数组属于引用类型,数组型数据是对象

(6)数组的赋值

  • 基本数据类型的赋值为值拷贝,与地址无关
  • 数组间的赋值为引用传递,赋的值为地址,称为引用传递

3、动态添加数组

import java.util.Scanner;
public class ArrayAdd {

	public static void main(String[] args) {

		Scanner scanner = new Scanner(System.in);
		int arr[] = {1, 2, 3};
        
		char answer;
		for ( ; ; ) {
			System.out.println("是否为数组扩容?(y/n)");
			answer = scanner.next().charAt(0);
			if (answer == 'y') {
				int arrNew[] = new int[arr.length + 1];
				for (int i = 0; i < arr.length; ++i) {
					arrNew[i] = arr[i];
				}
				System.out.println("请输入一个您要添加的数:");
				arrNew[arrNew.length - 1] = scanner.nextInt();
				arr = arrNew;
				System.out.println("添加后,数组为:");
				for (int i = 0; i < arrNew.length; ++i) {
					System.out.print(arr[i] + "\t");
				}
				System.out.println();
			} else {
				break;
			}
		}
	}
}

二、排序

将多个数据,按指定的顺序进行排序的过程

分类 概念 例子
内部排序 将所有数据都加载到内部存储器中进行排序 交换式排序、选择式排序、插入式排序...
外部排序 数据过大,无法全部加载至内存中 合并排序、直接排序

三、查找

1、顺序查找

依次查找、遍历

2、二分查找

四、二维数组

1、概念:每个元素本省就是一个数组的一维数组,就是二维数组

  • 语法

    类型[][] 数组名 = new 类型[大小][大小];
    
  • 在JVM内存中的储存形式

image-20211206220920269

2、二维数组的使用

初始化

  • 动态初始化
类型[][] 数组名 = new 类型[大小][大小];

//或者先声明,再初始化
类型[][] 数组名;
数组名 = new 类型[大小][大小];

//不完全初始化,即有未知元素长度——二维中一维长度不确定
int[][] arr = new int[2][];//一维地址数据的数组分配空间
for (int i = 0; i < arr.length; i++) {
    arr[i] = new int[i+1];//给二维数组中的一维数组元素分配空间,这里给一维数组分配空间可自由发挥
    //再遍历赋值
}
posted @ 2021-12-07 22:08  DarkSki  阅读(49)  评论(0编辑  收藏  举报