由于在数组的16节写掉了一节,在这里补上数组的拷贝,冒泡排序,二分法查找。
数组的拷贝有4中方式
1.for循环方法: 代码灵活,但效率低。就是用一个for循环进行元素的逐个拷贝,进行深拷贝或者浅复制这个大家可以自己把握。
如图:
2.System.arraycopy()方法
通过源码可以看到,其为native方法,即原生态方法。自然效率更高。
参数:src - 源数组。srcPos - 源数组中的起始位置。dest - 目标数组。destPos - 目标数据中的起始位置。length - 要复制的数组元素的数量
3.Arrays.copyOf 的用法
同样看源码,它的实现还是基于System.arraycopy(),所以效率自然低System.arraycpoy()。
代码演示:
4.Object.clone()方法从源码来看同样也是native方法,但返回为Object类型,所以赋值时将发生强转,所以效率不如之前两种。
代码演示:
1. 直接排序,双重for循环,数组的第一个数a[0]和后面所有的数进行比对,得到最小的数,然后第二个数a[1]和后面所有的数进行比对,得到次小的数。。。反复后得到排序后的结果。
代码演示:
2. 冒泡排序是两两之间进行对比,这样最大的一个数就到了数组的最后,第二次进行比对的时候只要比数组长度-2次,就是<arr.length-1,即可得到次大的数,放在倒数第二的位置,如此反复得到排序后的数组。
3. 插入排序和打牌一样,拿到一个数和前面已有的数进行对比,比前面的数小就放到前面
当数据量很大适宜采用该方法。采用二分法查找时,数据需是有序不重复的。
基本思想:
假设数据是按升序排序的,对于给定值 x,从序列的中间位置开始比较,如果当前位置值等于 x,则查找成功;若 x 小于当前位置值,则在数列的前半段中查找;若 x 大于当前位置值则在数列的后半段中继续查找,直到找到为止。
假设有一个数组 { 12, 23, 34, 45, 56, 67, 77, 89, 90 },现要求采用二分法找出指定的数值并将其在数组的索引返回,如果没有找到则返回 -1。
代码如下:
第二种使用递归的方法来实现二分查找如图: