文章目录
常见算法
查找算法
基本查找(顺序查找)
二分查找\折半查找
数组中的数据必须有序
插值查找(二分查找改进)
要求数组中的数据要比较均匀
斐波那契查找(二分查找改进)
二分改为斐波那契黄金分割数
分块查找
要求块内无序,块间有序
一般分块数为数组长开根号
思路:先确定查找的数在哪个块,再在块中依次查找
class Block{
int max;
int startIndex;
int endIndex;
}
扩展的分块查找
块内无序,块间无交集
class Block{
int max;
int min;
int startIndex;
int endIndex;
}
哈希查找(分块查找的扩展)
主要是对表的建立的思想,邻接表
数表查找
各种查找方式没有优劣之分,主要要看被查找的表的形式是什么样的,选择最合适的算法
排序算法
冒泡排序
选择排序
关键点:在排好之外的序列中找到最小的
插入排序
将无序序列中每个元素依次插入到有序序列中
快速排序
关键点:基准数,比基准数全部在左边,比基准大的全部在右边
递归算法思想
字符串匹配算法
算法API-Arrays
Arrays.toString(arr);转为字符串
Arrays.binarySearch();二分查找
Array.copyOf();拷贝数组
Array.copyOfRange();拷贝数组(指定范围)
Arrays.fill();填充数组
Arrays.sort();排序,默认升序
Lambda表达式(JDK8后新增)
Arrays.sort(arr,new Comparator<Integer>(){
@Override
public int compare(Integer o1,Integer o2){
return o1-o2;
}
});
//以上匿名内部类通过Lambda表达式可简化为
Arrays.sort(arr,(Integer o1,Integer o2)->{
return o1-o2;
}
);
//Lambda表达式简化写法
Arrays.sort(arr,(o1,o2)->o1-o2);
Lambda表达式不强调谁去做,而是怎么做
函数式接口,有且只有一个抽象类的接口