排序

04数组

一、键盘输入

1、引入键盘类

import java.util.Scanner;

2、创建键盘对象

Scanner   scanner=new Scanner(System.in);

3、输入数据

4、获取输入的数据

//1、导包:引入键盘类
import java.util.Scanner;

public class ScannerDemo {

  public static void main(String[] args) {

//       2、创建键盘对象
      Scanner   scanner=new Scanner(System.in);

//     3、输入数据
//       4\使用变量接收保存
//       输入字符串
//       String s1=scanner.next();
////       输入一行字符串
//       String s2=scanner.nextLine();
//
////       输入int
//       int i=scanner.nextInt();
////       输入double
//       double d=scanner.nextDouble();
////       输入boolean
      boolean   bl=scanner.nextBoolean();


//       System.out.println(s1);
//       System.out.println(s2);
//       System.out.println(i);
//       System.out.println(d);
      System.out.println(bl);

  }

}

二、数据类型

1、基本数据类型

byte short int long

float double

char

boolean

2、引用数据类型

数组

类:String字符串,枚举

接口

三、数组

1、数组是什么?

数据类型角度:数组是一种引用数据类型。

容器角度:数组是用来保存一组数据的容器。

我们之前的变量基本上都是基本数据类型的,每个变量只能存储一个值。

2、数组的特点

(1)数组中的数据可以是任何类型。

(2)一组数据必须类型相同。

(3)数组的长度,固定不变。

3、数组的存储原理

 

数组是一种存储数据的数据结构。

数组创建时,需要先确定其长度。

然后根据长度来划分元素空间。

每个元素中可以放一条数据。

元素的表示:数组名[下标]

四、数组的使用

 

1、声明数组

创建一个数组类型的变量。

语法:

元素的类型[] 数组名;

强调:数组名其实就是变量名!!

//        1/声明数组:创建一个数组类型的变量
//       使用数组类型声明,表示该变量中存储的是一个数组对象(容器)
      String[]   names;
      int[]   ages;

2、创建数组

必须先确定长度!!!!

语法:

new 元素的类型[长度];

关键字new用来创建新对象。

//        2、创建数组:创建一个数组类型的对象(容器)
//       下标0-4
      names=new   String[5];

 

3、元素赋值

数组名[下标]=数据;

元素的下标范围:0~长度-1

//        3、赋值
      names[0]="张三";
      names[1]="李四";
      names[2]="王五";
      names[3]="马六";
      names[4]="路人甲";

 

4、元素使用

还是通过 数组名[下标] 找到元素来取数据

//        4\使用数据
      System.out.println(names[0]);
      System.out.println(names[1]);
      System.out.println(names[2]);
      System.out.println(names[3]);
      System.out.println(names[4]);

5、数组的遍历

获取数组的长度:数组名.length

for(int i=0;i<数据名.length;i++){

System.out.println(数据名[i]);

}

//        5、数组的遍历
      for (int i = 0; i < names.length; i++) {
          System.out.println(names[i]);
      }

五、数组元素的缺省值

1、基本类型

byte short int long 0

float double 0.0

char 单个空白字符

boolean false

2、引用类型

所有引用类型的元素缺省值全是null

        int[]   a;
double[] b;
char[] c;
boolean[] d;
String[] s;


// 系统创建数组对象时,会给每个元素放一个缺省值
a=new int[4];
b=new double[4];
c=new char[4];
d=new boolean[4];
s=new String[4];

System.out.println(a[0]);
System.out.println(b[0]);
System.out.println(c[0]);
System.out.println(d[0]);
System.out.println(s[0]);

六、数组下标越界

1、下标的范围

始终是从0开始,一直到(长度-1)

2、越界

public class ArrayDemo03 {
public static void main(String[] args) {

int[] ages=new int[5];
ages[5]=5;
System.out.println(ages[9]);

}
}

运行时错误提示:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
at ArrayDemo03.main(ArrayDemo03.java:5)

七、空指针问题

null是一个引用类型的数据,可以是任何引用类型。

没有对象的地址。

int[]   a=null;
System.out.println(a[0]);

运行时错误提示:

Exception in thread "main" java.lang.NullPointerException	
at ArrayDemo04.main(ArrayDemo04.java:5)

没有new 就没有对象。

没有创建数组对象。

没有数组对象,就没有元素,没有元素就没有数据。

八、简写形式

       int[]  a;        
a=new int[3];
a[0]=0;
a[1]=1;
a[2]=2;

int[] a2=new int[3];
a2[0]=0;
a2[1]=1;
a2[2]=2;

int[] a3=new int[]{0,1,2};

int[] a4={0,1,2};

九、二维数组

1、二维数组

Java数组的本质,全是一维数组。

一个数组元素中又是一个数组,这样的数组我们习惯上喜欢叫二维数组。

 

2、使用

(1)声明数组

语法:

内部元素的类型[][]    数组名;
内部元素的类型 数组名[][];
内部元素的类型[] 数组名[];

案例:

//        二位数组的声明
int[] a;
int[][] aa;

(2)创建数组对象

语法:

new   内部数组元素类型[外部数组长度][内部数组长度]

案例:

//        创建二维数组
a=new int[3];
aa=new int[3][4];

(3)元素赋值

元素:

数组名[外部数组下标][内部数组下标]
//        元素赋值
aa[0][0]=100;
aa[0][1]=101;
aa[0][2]=102;
aa[0][3]=103;

aa[1][0]=110;
aa[1][1]=111;
aa[1][2]=112;
aa[1][3]=113;

aa[2][0]=120;
aa[2][1]=121;
aa[2][2]=122;
aa[2][3]=123;

(4)遍历

//        遍历
// aa.length=3
// 遍历外围数组
for (int i = 0; i < aa.length; i++) {
// 遍历内部数组 aa[i]
for (int j = 0; j < aa[i].length; j++) {
System.out.println(aa[i][j]);
}
}

3、简写

//        简写
int[][] bb={ {100,101,102,103},{110,111,112,113},{120,121,122,123} };

十、排序

1、排序

按照某种规则,重新排列。

常见的规则:大小、时间、热度==。

2、排序算法

实现排列的方法,我们叫排序算法。

常见的:

冒泡排序

选择排序

快速排序

插入排序

哈希排序

堆排序

桶排序

归并排序

==

性能:

(1)时间复杂度

(2)空间复杂度

(3)稳定性

3、冒泡排序

相邻两个数据进行比较,不符合规则交换位置。

 

总结规律:

n个数使用冒泡排序。

需要排n-1遍。

每一遍需要比较n-i次 (i表示第几遍,从1开始) 。

每一次都是从第一个开始比。

代码实现:

 int[]   a={5,4,6,3,7,2,1};

//       由小到大,重新排列

//       排n-1遍
      for (int i = 1; i < a.length; i++) {
          //每一遍:比较n-i次
          //每一遍都是从0开始
          for (int j = 0; j < a.length-i; j++) {
              //每一次比较:相邻比较
              if(a[j] > a[j+1]){
                  //不满足,交换位置
                  int temp=a[j];
                  a[j]=a[j+1];
                  a[j+1]=temp;
              }
          }
      }


//       检查一下
      for (int i = 0; i < a.length; i++) {
          System.out.println(a[i]);
      }
posted @ 2022-02-19 15:48  WhileGo  阅读(27)  评论(0)    收藏  举报