数组,排序方法

数组

概念:存储数据的容器

## 一、 特点
1、只能存储同一种数据类型
2、长度固定
3、直接打印数组名,打印的结果是数组在堆内存中的地址
4、数组创建后,都会根据其数据类型赋予默认值

	整型:0
	浮点型:0.0
	布尔型:false
	字符型:u0000 控制台中以一个空格显示
	其他(引用数据类型): null

## 二、 创建

[]的位置可以放在数据类型之后,也可以放在数组名之后
### 2.1 静态创建
	格式:
	数据类型 [] 数组名 = new 数据类型 []{元素1、元素2、、、、};
		
	变形:
	数据类型 [] 数组名 =  {元素1、元素2、、、、};

	注:当编码完成时,数组长度固定,在编译运行期间,不能再对数组进行改动,即不能对数组元素进行增删


	### 2.2 动态创建
		格式:
			数据类型 [] 数组名 = new 数据类型 [长度];

## 三、数组中元素的获取、赋值

格式:
	数组名[下标]

下标:索引、角标,  范围是 0~长度-1

获取数组的长度: 数组名.length  例如 arr.lengths
赋值:数组名[下标] = 值;


## 四、 遍历
1、借助Arrays工具类的toString(),将数组以字符串的形式输出

2、循环遍历

	int arr[] = {x,x,x,x,x,x};
	for(int i = 0 ; i < arr.lenght; i++){
		//输出
		System.out.println(arr[i]);
	} 


## 五、 存在的问题

1、ArrayIndexOutofBoundsException, 数组下标越界异常
	数组的下标的范围是0~长度-1,不在这个区间内,都会发生异常

注意下标要在合理的范围内


2、NullPointerException, 空指针异常

	数组对象没有new过就使用



## 六、 数组排序
### 6.1 冒泡排序
	即相邻元素作比较,满足交换条件则交换,得到当前最值
	找第一个最值时,不能省略次数
	 找第二个最值是,可以省略一次
	 找第三个最值时,可以省略两次
	 。。。。。

	int [] arr = {12,53,23,87,66,54,88};
	int temp = 0;
	for (int i = 0; i < arr.length-1; i++) {
		for(int j = 0; j < arr.length-1-i; j++){
			if(arr[j]<arr[j+1]){
				temp = arr[j+1];
				arr[j+1] = arr[j];
				arr[j] = temp;
			}
			
		}
		
	}



    ### 6.2 选择排序
	1、从第一个元素开始,将每一个与后续的所有元素进行比较
	 2、当得到最值时,与第一个元素进行交换
	3、在剩下还未排序的元素中,从第一个元素开始
	将每个元素与后续的所有元素进行比较
	当得到最值是,与当前的第一个元素进行交换

	 	int [] arr = {99,88,77,66,55,44,33,22,11};
		int temp;
		int minIndex;
		for (int i = 0; i < arr.length-1; i++) {
			minIndex = i;
			for(int j = i+1;j< arr.length;j++){
				if(arr[minIndex] > arr[j]){
					minIndex = j;
				}
			}
			temp = arr[i];
			arr[i] = arr[minIndex];
			arr[minIndex] = temp;
			System.out.println(Arrays.toString(arr));
		}

二维数组

概念:存储数组元素的数组,即每个元素都是一个数组

	## 一、创建
		1、
		数据类型 [][] 数组名 = new shu数据类型[①][②];

		①:二维数组的长度
		②:每一个小数组的长度

		2、数据类型[][]数组名 = new 数组类型[①][];


		3、数据类型[][] 数组名 = {}
			{元素1,元素2,。。。。。},
			{元素1,元素2,。。。。。},
			{元素1,元素2,元素3.。。。。}

		};
		这种方式创建的二维数组中的小数组要单独创建
代码改变生活
原文地址:https://www.cnblogs.com/LTJAVA/p/11368786.html