学习排序的方法的时候是紧跟在数组的学习之后的,所以要学会排序的逻辑原理,对于数组的基本的理解是必不可少的。
1.数组
首先数组的定义方式
1.1 动态定义数组
动态创建数组就是为数组开辟连续的存储空间,并且会为数组中的每一个元素赋默认值
创建格式:
数据类型 [ ] 数组名称 = new 数据类型[数组长度]
例如:想要创建一个能够存储10个int数据的数组
int [ ] arr = new int [10]
1.2 静态定义数组
静态创建数组就是在创建数组时,给出数组中要存储的内容,系统会自动的为数组分配长度
创建格式:
数据类型 [ ] 数组名称 = new 数据类型 [ ] {元素1,元素2,元素3,元素4,……,元素n}
元素与元素之间用逗号隔开
简写格式:
数据类型 [ ] 数组名称 = {元素1,元素2,元素3,元素4,……,元素n}
注意:静态初始化的简写格式只可以写在同一行,而不能先声明然后再指向
1.3 数组中常见的报错异常
/* 空指针异常
Exception in thread "main" java.lang.NullPointerException
at Demo_Array_03.main(Demo_Array_03.java:17)
原因:这是由于该数组为null,而又访问该数组中的该角标的元素时就会产生错误;
例如:
在左侧中的数组arr为null,而输出语句中再次访问为null的数组元素,则会报出空指针异常。
/* 角标越界异常
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
at Demo_Array_03.main(Demo_Array_03.java:25)
例如:
原因:定义的数组长度为5,但是数组的角标是从0开始计算,因此正确的跳出循环的条件应该为i<arr.length
2.常用简易排序方法(冒泡排序、选择排序)
2.1 冒泡排序
冒泡排序顾名思义,类似于水底的气泡向水面浮出,逐渐变大
原理:两个数之间两两比较,将较大的数放在右侧,以此类推,第一次循环完毕时,最大的数就会排在数组的最右侧,直到整个数组循环完毕,则整个数组是按照由小到大,如图所示:
每次循环结束以后,就会有一个较大的数排到数组最右侧
部分代码及运行截图:
2.2 选择排序
选择一个初始位置,拿这个位置上的值不断和其他位置的值进行比较,将值最小的元素交换至左侧
每一轮比较的次数 比上一轮都少一次
经过第一轮的比较 最小值 先出现在左侧
以此类推
原理如图所示:
部分代码和运行截图: