Java日报
部门:**大数据开发六部
姓名:cqmfx(阡陌飞絮)
日期:2020.10.25
备注:部分转自百度,CSDN,菜鸟,侵权删
大纲
一、数组介绍
二、排序
数组那些事
一、数组介绍
1、基本概念
数组(Array)是有序的元素序列。 若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标(length)。数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按有序的形式组织起来的一种形式。 这些有序排列的同类数据元素的集合称为数组。
数组是用于储存多个相同类型数据的集合。
2、数组的基本特点:
(1) 长度是确定的。数组一旦被创建,它的大小就是不可以改变的。
(2 )其元素必须是相同类型,不允许出现混合类型。元素的类型可以 是Java 支持的任意类型
(3) 数组类型可以是任何数据类型,包括基本类型和引用类型。
(4)数组的元素在堆内存中被分配空间,并且是连续分配的
(5)使用new 关键字对数组进行 内存的分配。每个元素都会被jvm 赋予默认值。默认规则:整数:0 浮点数:0.0
字符:\u0000 布尔:false 引用数据类型:null。
(6)数组的元素都是有序号的,序号从0开始,0序的。称作数组的 下标、索引、角标
3、数组的声明:
(1)声明的时候并没有实例化任何对象,只有在实例化数组对象时,JVM才分配空间,这时才与长度有关。
(2)声明一个数组的时候并没有数组真正被创建。
(3)构造一个数组,必须指定长度。
4、数组格式:
4.1、元素类型[ ] 数组名 = new 元素类型 [元素个数或数组长度];
int [] arr = new int [5];
dataType[] arrayRefVar = new dataType[arraySize];
[]:代表这是数组类型。
4.2、数组名:一个合法的标识符,命名规范 和 局部变量 规范一致。
4.3、new:是java 的关键字。用来向JVM申请内存的。
4.4、元素类型[元素个数] :决定了向JVM申请的内存空间的大小。
大小:元素类型字节数 * 元素个数
元素的个数:只要是一个合法的java 表达式就可以。 返回一个int 类型的值即可
5、多维数组
多维数组可以看成以数组为元素的数组。可以有二维、三维、甚至更多维数组,但是实际开发中用的非常少。最多到二维数组
二、排序
0、找最大值(打擂台)
int [] array = {5,86,3,4,7,2,6}; //定义一个数组
//比大小(打擂主)
int temp = array [0]; //初始化temp
for (int i = 0;i <= 6; i++){ //变量i初始化,运行0-6次,挨个两两比较
if (temp < array[i]){ //如果前一个(temp)比后一个(array[i]大)
temp = array [i]; //则交换,最后得出最大(储存在temp里)的那个
}
}
System.out.println(temp);
1、冒泡排序(Bubble Sort)
1.1、介绍
冒泡排序(Bubble Sort)是常用的数组排序算法之一
冒泡排序的基本思想是:对比相邻的元素值,如果满足条件就交换元素值,把较小的元素值移动到数组前面,把大的元素值移动到数组后面(也就是交换两个元素的位置),这样数组元素就像气泡一样从底部上升到顶部
冒泡排序的算法比较简单,排序的结果稳定,但时间效率不太高
1.2、实操
int bubbleSort [] = {5,9,3,7,8,22,1,45}; //定义数组
//使用冒泡排序
int temp = bubbleSort[0]; //初始化
for (int i = 0;i < bubbleSort.length -1;i++){ //控制外循环的轮数
for (int j = 0;j<bubbleSort.length - i - 1;j++){ //控制内循环两两之间比较的次数
if (bubbleSort [j] > bubbleSort [j + 1]){
//两两比较 将大的冒泡到后面(><可控制大的\小的值放在前面、后面)
temp = bubbleSort[j];
bubbleSort [j] = bubbleSort [j + 1]; //比较后交换
bubbleSort [j + 1] = temp;
}
}
}
for (int i = 0;i < bubbleSort.length;i++){
System.out.println(bubbleSort [i]);
}
2、选择排序(SelctionSort)
2.1、基本思想
在长度为N的无序数组中,第一次遍历n-1个数,找到最小的数值与第一个元素交换;
第二次遍历n-2个数,找到最小的数值与第二个元素交换;
…
第n-1次遍历,找到最小的数值与第n-1个元素交换,排序完成。
2.2、实操
int[] selctionSort = {5, 9, 7, 12, 14, 1, 3};
//选择排序
for (int i = 0; i < selctionSort.length - 1; i++) { //重复排序过程
int min = i; //每次从第i次比较,这样可以不再和前面的元素比较
for (int j = i + 1; j < selctionSort.length; j++) { //i+1是方便第i个元素和后面的比大小,就不会和自身比了
if (selctionSort[j] < selctionSort[min]) { //每个数和下标为零的数比较,找到其中最小的数
min = j; //然后将值大的下标赋给原来的零下标=得到了最小的值
} //到这步就相当于选择好最小的元素了
} //下面进行排序,就是一直将最小的数挨个放到最前面
int temp = selctionSort[i]; //进行排序:将最小的数放到temp里面
selctionSort[i] = selctionSort[min]; //将下标为零的数放到selctionSort [j]里面
selctionSort[min] = temp; //再将数组中最小的数(元素)放到下标为0的元素那儿
} //这样循环一直将剩下元素中最小的数放到前面
for (int i = 0; i < selctionSort.length; i++) { //将排列好的数遍历打印出来
System.out.println(selctionSort[i]);
}
3、插入排序(Insertion Sort)
3.1、基本思想
在要排序的一组数中,假定前n-1个数已经排好序,现在将第n个数插到前面的有序数列中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。
排序都采用就地在数组上实现具体算法描述如下:
- 从第一个元素开始,该元素可以认为已经被排序;
- 取出下一个元素,在已经排序的元素序列中从后向前扫描;
- 如果该元素(已排序)大于新元素,将该元素移到下一位置;
- 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;
- 将新元素插入到该位置后;
- 重复步骤2〜5。
3.2、实操
int [] insertionSort ={5,6,7,1,9,3,2};
for (int i = 0;i < insertionSort.length - 1;i++) {
for (int j = i + 1; j > 0; j--) {
if (insertionSort[j] < insertionSort[j - 1]){
int temp = insertionSort[j - 1];
insertionSort[j - 1] = insertionSort[j];
insertionSort[j] = temp;
} else {
break;
}
}
}
for (int i = 0;i < insertionSort.length;i++){
System.out.println(insertionSort[i]);
}