第6章 数组、排序和查找
6.1为什么需要数组
一个养鸡场有6只鸡,它们的体重分别是3kg,5kg,1kg,3.4kg,2kg,50kg。请问这六只鸡的总体重是多少?平均体重是多少?请你编一个程序
思路:定义6个变量,加起来总体重,求出平均体重.引出->数组
6.1.1数组介绍
数组可以存放多个同一类型的数据。数组也是一种数据类型,是引用类型。即:数(数据)组(一组)就是一组数据
6.2数组的使用
1.使用方式1--动态初始化
数组的定义:数据类型 数组名[] = new 数据类型[大小] 例如:int a[] = new int [5];//创建了一个数组,名字a,存放5个int
说明:这是定义数组的一种方法
2.数组的引用(使用/访问/获取数组元素)
数组名[下标、索引、index]。数组的下标从0开始
6.2.1使用方式2--动态初始化
先声明数组
语法:数据类型 数组名[];也可以是 数据类型[] 数组名;
例如:int a[];或者 int [] a ;
创建数组
语法:数组名 = new 数据类型[大小];
例如:a = new int[10];
6.3数组使用的注意事项和细节
1.数组是多个相同类型数据的组合,实现对这些数据的统一管理
2.数组中的元素可以是任何数据类型,包括基本类型和引用类型,但是不能混用
3.数组创建后,如果没有赋值,有默认值
int0,short0,byte0,long0,float0.0,double0.0,char\u0000,booleanfalse,Stringnull
4.使用数组的步骤1.声明数组并开辟空间2给数组各个元素赋值3使用数组
5.数组的下标是从0开始的。
6.数组下标必须在指定范围内使用,否则报:下标越界异常,比如;int[]arr=newint[5];则有效下标为0-4
7.数组属引用类型,数组型数据是对象(object)
6.4数组应用案例
6.5数组赋值机制
1)基本数据类型赋值,这个值就是具体的数据,而且相互不影响。intn1=2;intn2=n1;
2)数组在默认情况下是引用传递,赋的值是地址。
3)分析数组赋值的内存图(重点,难点.)。!!!
6.6数组拷贝
将int[]arr1={10,20,30};拷贝到arr2数组,要求数据空间是独立的.
//将int[]arr1={10,20,30};拷贝到arr2数组,
//创建一个新的数组arr2,开辟新的数据空间
//遍历arr1,把每个元素拷贝到arr2对应的元素位置
//老师修改arr2,不会对arr1有影响
//输出arr1
6.7数组反转
老韩思路
6.8数组添加/扩容
自己来
要求:实现动态的给数组添加元素效果,实现对数组扩容
6.9排序的介绍
排序是将多个数据,依指定的顺序进行排列的过程。
排序的分类:
6.9.1内部排序
指将需要处理的所有数据都加载到内部存储器中进行排序。包括(交换式排序法、选择式排序法和插入式排序法);
6.9.2外部排序法:
数据量过大,无法全部加载到内存中,需要借助外部存储进行排序。包括(合并排序法和直接合并排序法)。
6.10冒泡排序法
介绍
冒泡排序(BubbleSorting)的基本思想是:通过对待排序序列从后向前(从下标较大的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒。
6.11冒泡排序法
们将五个无序:24,69,80,57,13使用冒泡排序法将其排成一个从小到大的有序数列。
总结冒泡排序特点
1.我们一共有5个元素
2.一共进行了4轮排序,可以看成是外层循环
3.每1轮排序可以确定一个数的位置,比如第一轮确定最大的数,第二轮确定第2大的数的位置以此类推
4.当进行比较时,如果前面的数大于后面的数,就交换
5.每轮比较在减少4-3-2-1
6.12查找
6.12.1介绍
1)顺序查找
2)二分查找
6.13多维数组--二维数组
6.14二维数组的使用
6.14.1//什么是二维数组:
//老韩解读
//1.从定义形式上看int[][]
//2.可以这样理解,原来的一维数组的每个元素是一维数组,就构成二维数组int[][]arr={{0,0,0,0,0,0},
6.14.2 使用方式1:动态初始化
1)语法:类型[][]数组名=new类型[大小][大小]
2)比如:inta[][]=newint[2][3]
6.14.3使用方式2:动态初始化
1)先声明:类型数组名[][];
2)再定义(开辟空间)数组名=new类型[大小][大小]
3)赋值(有默认值,比如int类型的就是0)
6.14.5使用方式4:静态初始化
1)定义类型数组名[][]={{值1,值2..},{值1,值2..},{值1,值2..}}
比如:int[][]arr={{1,1,1},{8,8,9},{100}};
解读
1.定义了一个二维数组arr
2.arr有三个元素(每个元素都是一维数组)
3.第一个一维数组有3个元素,第二个一维数组有3个元素,第三个一维数组有1个元素
6.15二维数组的应用案例
1)一维数组的声明方式有:int[]x或者intx[]
2)二维数组的声明方式有:int[][]y或者int[]y[]或者int
3)二维数组实际上是由多个一维数组组成的,它的各个一维数组的长度可以相同,也可以不相同。比如:map[][]是一个二维数组
6.16二维数组使用细节和注意事项
6.17练习
6.18作业