数组,排序方法

数组

概念:存储数据的容器

一、 特点

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,。。。。。},

};
这种方式创建的二维数组中的小数组要单独创建

posted on 2019-08-17 15:28  半缘卿  阅读(93)  评论(0)    收藏  举报

导航