数组
数组的主要问题
定义、初始化、遍历、内存存储
引用变量数组内存的是地址,基本变量数组内存的是值
自己造数组的少,集合里很多数组
数组中的算法
1.数组元素赋值
2.数值型数组的计算
3.数组的复制、反转、查找(线性查找、二分查找)
4.数组排序(冒泡排序、快速排序)
数组复制:要先new出一个新数组,再通过遍历来复制
反转:头尾交换、第二个和倒数第二个交换,循环条件是length/2
查找:
- 线性查找(从前往后一个个找)
- 二分法查找(折半查找),前提是数组数据要有序(没有就得先排序),实现方法是首索引、末索引,再定位中间,数据量大的时候更快
排序:
衡量排序算法的优劣: - 时间复杂度(关键字比较次数和移动次数)
- 空间复杂度(需要多少辅助内存)
- 稳定性:若Key A = Key B,排序后A,B次序不变,则排序算法是稳定的
排序算法分类:内部排序(内存中完成),外部排序(数据多,内存完成不了,需要借助外部存储器,常见是多路归并排序,外部排序=多次内部排序)
十大内部排序算法:选择(直接选择排序、堆排序),交换(冒泡排序,快速排序),插入(直接插入排序,折半插入排序,Shell排序),归并排序,桶式排序,基数排序
算法的五大特征:input,output,finiteness,definiteness,effectiveness
冒泡排序
遍历一次,将最大的放到最后,再遍历1到n-1次……每次冒泡最大的放到最后
快速排序
速度最快,是指数级的,类似于细胞分裂
排序的横向对比
平均时间:快速排序最快,但worst case scenario下步入堆排序和归并排序
工具类:Arrays
Arrays是操作数组的工具类,定义了很多操作数组的方法