第一讲 数组初始化&操作
1、 数组定义
概念:数组是同一种类型数据的集合,其实数组就是一个容器。数组中的元素从0开始编号,这样方便了对这些元素进行操作(获取、修改改、排序等)。
数组的定义格式有:
Int[] arr = new int[10]; ——这里指定数组的长度,后续需要分别对每一个元素赋值;
Int[] arr = new int[]{2,1,5,9};——创建数组实体并初始化,不需要指定长度;
Int[] arr = {2,1,5,9};——定义数组并初始化;
2、 数组操作
1) 获取数组中的元素,通常需要遍历数组
Int[] arr = {2,1,5,9};
For(int x = 0;x<arr.length;x++) //length是数组中表示数组元素个数的属性。
{
System.out.print(arr[x]);//遍历数组arr,打印数组中所有元素。
}
2) 获取最值
获取最大值思路:1、获取最值需要比较,每一次比较都会有一个较大的值,可以将该较大值存在一个临时变量中。2、让数组中的每一个元素和这个变量中的值进行比较,如果大于了变量中的值,就将该元素值赋给该变量。3、当所有的元素都比较完成,那么该变量中的值就是数组中的最大值。
步骤:1、定义变量,初始化为数组中任意一个元素;2、通过循环语句对数组进行遍历;3、在遍历过程中定义判断条件,如果遍历到的元素比变量中的值大,就将元素赋值给变量。
获取最小值思路:与获取最大值相似,只是在遍历数组进行比较时,变量中存储的是较小值。
获取最大最小值代码实现如下:
第二讲 数组排序
1、 选择排序法
内循环一次,最值出现在头角标位置上
思路:拿数组第一个元素与后面的元素遍历比较,将若大于(小于)第一个则两者值互换,第一个元素与其他元素比较完后,拿第二个元素与后面的元素进行遍历比较,依次类推,直到遍历完成,数组排序完成。
实现代码如下:
2、 冒泡排序法
内循环一次,最值出现在最后角标位置上。
思路:相邻两个元素进行比较,如果符合条件(大于或小于)进行值互换;
代码实现如下:
3、 希尔排序
希尔算法是最快的排序算法。
选择/冒泡排序法效率低的原因是:比较完成后需要在堆内存中进行元素对换。解决方案:将需要换位的元素脚标存放在内存中,最后一次互换就直接数组元素互换。
4、 Java中有自带的排序方法:Arrays.sort(arr);
第三讲 数组查找操作
1、 获取关键值在数组中第一次出现的位置
思路:遍历数组,并与该值进行比较,如果相等则返回角标位置。
代码实现如下:
2、 折半查找算法
折半查找可以减少遍历的次数,从而提高查找的效率,但要求该数组必须是有序的。
思路:用关键值与数据中间元素进行比较,然后根据比较结果判断关键值在前半部分还是后半部分,然后再折半查找那一部分,依次类推。
代码实现如下:
3、 练习
将一个元素插入到一个有序数组中,保证该数组仍是有序的。如果获取该元素应该插入数组的哪个位置。
思路:
折半算法在数组中查找该元素,返回最小下角标,该下角标就是元素插入数组的位置。
第四讲 进制转换
1、 十进制转成二进制
2、 十进制转成十六进制
3、 查表法将十进制转成十六进制
思路:先将十六进制的元素(0~F)临时存储在一个表中,每一次&15后的值作为索引区查找建立好的表,就可以找到对应的元素。。
代码实现如下:
4、 查表法将十进制转成二进制
知识点总结
1、 数组有多种定义和初始化方式
1) 若不知道数组具体值,但直到数据长度,可以定义数据并指定长度:int [] arr = new int[10],后续只能遍历将元素赋值给数组中的单独位置;
2) 若不知道数组长度,但直到数组中的值,可以用这种方式定义并初始化:int [] arr = new int[]{1,2,3}
2、 数组排序
都需要利用嵌套循环。
1)选择排序法,内循环一次,最值出现在头角标位置上;
2)冒泡排序法,内循环一次,最值出现在最后角标位置上;
3)希尔排序效率最高;
4)java中有自带的排序程序:Arrays.sort(arr);
3、 查找
查找某个关键字在数组中第一次出现的位置,折半算法效率较高。
4、 进制转换
通过取余来获取某个位上的值,可以通过查表法来进行转换,取值更方便。