学习目标:
-
数组
-
算法入门
-
查找
-
排序
-
数组:
什么是数组:
数组是一种,连续内存,大小固定的线性表,是一种数据结构,用来解决大量数据的存储问题。
数组的定义:
第一种: 数据类型 【 】变量名称 = new 数据类型【大小】;
第二种: 数据类型【】 变量名称 = new 数据类型【】{值1,值2,值3,……};
第三种:数据类型【】 变量名称 ={值1,值2,值3,……};
数组特点:
-
大小固定,长度不可变。
-
连续内存地址(不能在其他块创建数组内存地址,会导致非连续性)
-
存储的数据类型固定
-
数组是保存在堆内存中的,因此数组是一个对象!!!
容器(collection):
容器一般是一种数据结构(都是容器),它是用来解决多个数据保存和计算的容器。
1,数组长度:
数组对象.length // 获取数组的(长度)属性
2,访问数组元素: 通过下标来访问,
注意:在编程中,99%情况下,下标都是从0开始的(jdbc从1开始)。
数组对象 [下标值] //如果下标值超出范围,就会抛出异常
3,数组是可以修改的:
数组对象 [需要修改对象的下标值] = 新的值
4,遍历数组:(做一个索引)
方法1:
方法2:
5,(迭代循环)Foreach //循环加强,是JDK5的新特性,是一种迭代容器操作
For(数据类型 临时变量:迭代对象){
System.out.printin(临时遍历);
}
练习:用户输入10个数,输入到数组中,求数组的最大值和平均值。
排序:(算法 | 菜鸟分类 | 菜鸟教程 (runoob.com)
冒泡排序:
冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端。
1. 算法步骤
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
2.动图演示
3. 什么时候最快
当输入的数据已经是正序时(都已经是正序了,我还要你冒泡排序有何用啊)。
4. 什么时候最慢
当输入的数据是反序时(写一个 for 循环反序输出数据不就行了,干嘛要用你冒泡排序呢,我是闲的吗)。
选择排序:
选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n²) 的时间复杂度。所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间吧。
1. 算法步骤
首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。
再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
重复第二步,直到所有元素均排序完毕。
2.动图演示
假设第一个值为最小值,然后依次做判断到结束,直到找到真正的最小值,交换这
个数,然后开始做第二个数的判断,直到数组内的数全部判断完,结束。
插入排序:
默认第一个数为有序数组,之后的所有数依次插入第一个数组中,并且必须保证插入时数组一直是有序的。
1. 算法步骤
将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。)
2.动图演示