【尚硅谷-Java学习】3.1数组和排序

数组:

存储相同类型的元素。

相关概念:

数组名、
元素、
角标(下标、索引)、
数组长度

特点:

数组是有序排列的;
数组是引用数据类型,元素可以是基本数据类型也可以是引用数据类型;
创建数组会在内存中开辟一块连续的存储空间,长度一旦确定无法修改。

分类:

按照维数:一维数组、二维数组……
按照数组元素类型:基本数据类型元素数组、引用数据类型数组

一维数组

  • 声明和初始化
		// 静态初始化:数组的初始化和元素的赋值同时进行
		int[] ids = new int[]{1001,1002,1003,1004};
		
		// 动态初始化:数组的初始化和元素的赋值分开进行
		String[] names = new String[5];
//也是正确地
int[] arr = {1,2,3,4,5};//先声明再赋值是不能这样省略的
int arr1[] = new int[5];
  • 如何调用指定位置的元素
    names[0]

  • 如何获取数组长度
    names.length

System.out.println(names.length);
  • 如何遍历数组
    通过数组长度,循环获取每个元素
  • 数组元素的默认初始化值
    元素是整型(int、short、long):0
    元素是浮点型(float、double):0.0
    元素是char型:0(ascll码为0的或’\u0000’而非‘0’) 代码见下
    元素是boolean型:false
    元素是引用数据类型(例如String类型):null(而非"null") 代码见下
//元素是char型
char[] arr = new char[4];
System.out.println(char[0]==0);

true

//元素是String类型
String[] arr1 = new String[4];
System.out.println(arr1[0]==null);

true

  • 数组的内存解析
    栈:存储局部变量,即数组名,
    堆:存储new出来的结构,例如对象和数组
    给栈中的数组名 赋值 数组首地址值
    当堆中的数组没有栈中的变量指向,会被回收
    当出了变量的作用域,栈中的变量会出栈,变量指向的数组会被回收。

二维数组

一维数组array1作为另一个一维数组array2的元素而存在。
从数组底层的运行机制来看,其实并没有二维数组。

  • 声明和初始化
		//静态初始化:内层一维数组的元素个数可以不同
		int[][] arr = new int[][]{{1,2,3},{4,5},{7,8,9}};
		
		//动态初始化1
		String[][] arr2 = new String[3][2];
		//动态初始化2
		String[][] arr3 = new String[3][];
//也是正确的
int arr1[][] = new int[3][];
int[] arr2[] = new int[3][];
int[][] arr3 = {{1,2},{3},{4,5}};

  • 如何调用指定位置的元素
    array[0][2]

  • 如何获取数组长度
    array.length
    array[0].length

  • 如何遍历数组
    嵌套循环

  • 数组元素的默认初始化值
    外层元素:地址值,如果内层数组未赋值,外层元素初始值为null。
    内层元素:初始值和一维数组相同

  • 数组的内存解析
    栈:存储局部变量,即数组名,
    堆:存储new出来的结构,例如对象和数组
    给栈中的数组名 赋值 数组首地址值
    当堆中的数组没有栈中的变量指向,会被回收
    当出了变量的作用域,栈中的变量会出栈,变量指向的数组会被回收。

数组的相关算法

1.数组的赋值(杨辉三角、回形数)

杨辉三角
第N行有N个数字,第一个和最后一个是1,其余数字满足: n i j = n i − 1 j − 1 + n i − 1 j n_{ij }= n_{i-1j-1}+n_{i-1j} nij=ni1j1+ni1j
回形数
输入整数n,生成n*n的二维数组,元素按照顺时针顺序从1递增。例如输入3,得到

1 2 3
8 9 4
7 6 5

回形数 解答

2.求数值型数组中元素的最大值、最小值、平均值、总和等

3.数组的复制、反转、查找(现行查找、二分查找)

array2 = array1 :将数组1的地址给了数组2,都指向堆中唯一一个数组实体。不能称作数组的复制。

二分法查找:数组必须有序

4.数组元素的排序

衡量标准:

  • 时间复杂度
  • 空间复杂度
  • 稳定性:若A和B值相等,A、B先后次序保持不变则是稳定的。
    排序法算法的分类:
  • 内部排序
    在内存中完成,不需要借助外部存储器。
  • 外部排序
    参与排序的数据非常多,无法在内存中完成,必须借助外部存储器。常见的是多路归并排序。可以将外部排序看作多次内部排序组成。

十大内部排序算法

  • 选择排序
    直接选择排序,堆排序
  • 交换排序
    冒泡排序,快速排序
  • 插入排序
  • 直接插入排序,折半插入排序,shell排序
  • 归并排序
  • 桶式排序
  • 基数排序
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值