第6单元 数组
6.1 数组的概念
一组相同数据的集合
6.2 数组的声明
\1. int[] 数组名 = new int[数组长度]; (最常用的方法)
\2. int 数组名[] = new int[数组长度];(最不推荐使用)
\3. int[] 数组名 = new int[]{初始值1,初始值2...};
\4. int[] 数组名 = {初始值1,初始值2...};
注意:
\1. 数组声明之后,不可以再改变数组长度
\2. 数组中只能存储同类型的值
6.3数组内存存储
6.4 数组排序
arr.length-1
5 | 4 | 3 | 2 | 1 | |
---|---|---|---|---|---|
4 | 3 | 2 | 1 | 5 | 4次arr.length-1-0 i=0 |
3 | 2 | 1 | 4 | 5 | 3次 arr.length--1-1 i=1 |
2 | 1 | 3 | 4 | 5 | 2次 arr.length-1-2 i=2 |
1 | 2 | 3 | 4 | 5 | 1次 arr.length-1-3 i=3 |
冒泡排序:
int[] arr = {2, 6, 12, 45, 3, 63, 48, 30}; for (int i = 0; i < arr.length - 1; i++) {//比较 for (int j = 0; j < arr.length - i-1; j++) {//交换 int temp; if (arr[j] > arr[j + 1]) { temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } for (int k = 0; k <arr.length ; k++) { System.out.print(arr[k]+" "); } System.out.println(); } System.out.println("-----------------------------"); } for (int i = 0; i <arr.length ; i++) { System.out.print(arr[i]+" "); }
6.5折半查找:
int[] arr ={12,15,36,78,88,99,100,123,456,888}; int key=13; int min = 0; int max = arr.length-1; int mid = (min+max)/2; boolean a=true; while(a){ if (key<=arr[mid]){ max = mid-1; } if (key>=arr[mid]){ min = mid+1; } mid = (min+max)/2; System.out.println(max); System.out.println(min); System.out.println(mid); System.out.println("///"); if (key==arr[mid]){ System.out.println("该数存在,下标为:"+mid); break; } if (min>=max){ System.out.println("该数不存在"); break; } }
作业
package com.xszx.test; import java.util.*; public class HomeWork026 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); // 1. System.out.println("请输入月份(1-12)"); // int month = sc.nextInt(); // int[] day={30,29,31}; // if(month==1|month==3|month==5|month==7|month==8|month==10|month==12){ // System.out.println(day[2]); // } // if(month==4|month==6|month==9|month==11){ // System.out.println(day[0]); // } // if(month==2){ // System.out.println(day[1]); } // int[] arr={64,54,63,12,89,45,21,10,36,100}; // for (int i = 0; i <arr.length ; i++) { // for (int j = 0; j < arr.length - i; j++) { // int temp; // if (arr[i] > arr[i + 1]) { // temp = arr[i]; // arr[i] = arr[i + 1]; // arr[i + 1] = arr[i]; // } // } // // } // System.out.println("最大值为:" +arr[9]+" 最小值为 "+arr[0]); //通过屏幕输入五个学生的成绩,排序后输出。 // System.out.println("请输入五个数"); // int a = sc.nextInt(); // int b = sc.nextInt(); // int c = sc.nextInt(); // int d = sc.nextInt(); // int e = sc.nextInt(); // int[] arr={a,b,c,d,e}; // for (int i = 0; i <arr.length-1 ; i++) { // for (int j = 0; j <arr.length-i-1 ; j++) { // int temp; // if(arr[j]>arr[j+1]){ // temp =arr[j]; // arr[j]=arr[j+1]; // arr[j+1]=temp; // } // } // } // // for (int k = 0; k <arr.length ; k++) { // System.out.println(arr[k]); // } // //查找数组中最大最小值 // int[] arr={20,50,30,3,16}; // for (int i = 1; i <arr.length; i++) { // int temp; // if(arr[i-1]>arr[i]){ // temp=arr[i]; // arr[i]=arr[i-1]; // arr[i-1]=temp; // } // } // System.out.println(arr[arr.length-1]); // for (int i = 1; i <arr.length; i++) { // int temp; // if(arr[i-1]<arr[i]){ // temp=arr[i]; // arr[i]=arr[i-1]; // arr[i-1]=temp; // } // } // System.out.println(arr[arr.length-1]); //4.在数组中查找元素(先打印输出所有元素,输入一个数, // 如果找到了则打印输出其位置, // 没有找到则提示没有找到职责提示没有找到) // int[] arr1={12,15,56,58,65,75,100}; // for (int i = 0; i <arr1.length ; i++) { // System.out.print(arr1[i]+" ,"); // } // System.out.println(); // System.out.print("请输入一个数:"); // int a = sc.nextInt(); // int min = 0; // int max = arr1.length-1; // int mid = (min+max)/2; // boolean b=true; // while(b){ // // if (a<=arr1[mid]){ // max = mid-1; // } // // if (a>=arr1[mid]){ // min = mid+1; // } // mid = (min+max)/2; // if (a==arr1[mid]){ // System.out.println("该数存在,下标为:"+mid); // break; // } // if (min>=max){ // System.out.println("该数不存在"); // break; // } // } // } }