笔记内容:数组
笔记来源:毕向东Java基础视频第4天
正文:
(都是自己理解的,如果有错误,请包涵,代码都是看了视频自己写的)
数组:使用来存储数据的集合或容器或者存储同一数据类型的集合或容器。
格式:创建数组有两种格式
1.类型[] 数组名 = new 类型[]{元素,元素,...};
2.类型[] 数组名 = {元素,元素,...};
//选择排序和冒泡排序
- class SortDemo
- {
- public static void main(String[] args)
- {
- //两种方式定义数组
- int[] arr = {18,69,12,186,74,13,10};
- int[] arr1 = new int[]{123,234,435,12,34,89,128};
-
- //主函数的输出语句,以字符串形式输出排序前后的数组
- //在这里输出arr为例
- //排序前的顺序
- System.out.println("输出前");
- String a = showArr(arr);
- System.out.println(a);
-
- System.out.println("--------------------------------------");
- //排序后的顺序
- System.out.println("输出后");
- selectionSort(arr); //选择排序
- a = showArr(arr);
- System.out.println(a);
- bubbleSort(arr);//冒泡排序
- a = showArr(arr);
- System.out.println(a);
- }
- //数组的遍历
- public static String showArr(int[] arr)
- {
- String a = "";
- //遍历数组,将数组元素用字符串连接
- for(int x=0;x < arr.length;x++)
- {
- if (x!=arr.length-1)
- a = a + arr[x] + ",";
- else
- a = a + arr[x];
- }
- return a;
- }
- //选择排序
- public static void selectionSort(int[] arr)
- {
- //for外循环控制主动比较的数组项
- for(int x=0;x<=arr.length-2;x++)
- {
- //for内循环控制被比较的数组项
- for(int y=x+1;y<=arr.length-1;y++)
- {
- //判断,如果比较的数据项大于比较的数据项,则交换
- if (arr[x]>arr[y])
- {
- swap(arr,x,y);
- }
- }
- }
- }
- //冒泡排序
- /*
- 冒泡排序原理理解: 从第一个元素开始,每个数组元素都与自己下一个元素比较大小,
- 如果大于后一个元素,就交换位置,如果不大于,就位置不变,一轮过后
- 最后一个元素则为最大元素。每轮比较过后,下轮比较就不包括已确认大
- 小的元素。最后经过 (arr.length-1)次比较,排序完成。
-
- */
- public static void bubbleSort(int[] arr)
- {
- //确认每轮比较参与的元素(去掉了上一轮中确认最大的元素)
- for (int x = (arr.length-1); x>0 ;x--)
- {
- //从0角标的数组元素开始,每一个元素都与下一个元素比较
- //大的往后,这样一轮过后,最后一个元素就是最大的了
- for (int y = 0;y < (arr.length-1);y++)
- {
- if (arr[y] > arr[y+1])
- {
- swap(arr,y,y+1);
- }
- }
- }
- }
- public static void swap(int[] arr,int index1,int index2)
- {
- int temp = arr[index1];
- arr[index1] = arr[index2];
- arr[index2] = temp;
- }
- }
复制代码
//数组的线性查找和二分查找- class ArrSearch
- {
- public static void main(String[] args)
- {
- int[] arr = new int[] {10,19,21,45,63,84,96};
- int key = 21;
- int a = linearSearch(arr,key);//线性查找
- int a1 = halfSearch(arr,key);//二分查找法
- System.out.println("线性查找后匹配的数组元素下标是:"+a);
- System.out.println("二分查找后匹配的数组元素下标是:"+a1);
- }
- /*
- 线性查找:就是遍历整个数组,将数组中每个元素都与
- key值校队,匹配成功后将匹配的数组元素的下标返回
- 如果遍历整个数组没有匹配元素,就返回-1.
- */
- public static int linearSearch(int[] arr,int key)
- {
- for (int x=0; x<arr.length-1; x++)
- {
- if (key == arr[x])
- {
- return x;
- }
- }
- return -1;
- }
- /*
- 二分查找法:使用此查找该方法的前提是数组是有序的
-
- 方法的思想就是让Key与数组的中间元素相比较:
- 1.比中间元素大,则查找的范围就变成数组的后一半元素;
- 2.比中间元素小,则查找的范围就变成数组的前一半元素;
- 3.跟中间元素匹配。
- */
- public static int halfSearch(int[] arr,int key)
- {
- int min = 0;
- int max = arr.length-1;
- int mid = (min+max)/2;
- while (key != arr[mid])
- {
- if (key>arr[mid])
- {
- min = mid + 1; //因为中间元素已经比较过,所以后移一位
- }
- else if(key<arr[mid])
- {
- max = mid - 1; //因为中间元素已经比较过,所以前移一位
- }
- //判断如果没有匹配的情况下,二分最后导致min>max
- if (min>max)
- {
- return -1;
- }
- //每一轮mid值都会随min和max改变
- mid = (mid+max)/2;
- }
-
- return mid;
- }
- }
复制代码 //二维数组
创建:数据类型[][] 数组名;
创建二位数组必须明确有多少一维数组;
二维数组相当于二位数组里的元素是一维数组。
//二维数组求和
- class TwoArry
- {
- public static void main(String[] args)
- {
- int[][] arr = {{12,13,14},{48,93,109},{23,10,18,95}};
- int sum = 0;
- for (int x=0; x<arr.length; x++)
- {
- for (int y=0; y<arr[x].length; y++)
- {
- sum += arr[x][y];
- }
- }
- System.out.println(sum);
- }
- }
复制代码
|