2018-10-29 下午 6:30 电话面试

1.   排序算法

资料:十大经典排序算法

总结:

冒泡排序:每次比较相邻的两个,根据大小决定是否互换位置

快速排序:分治法,选择基准值,将所有比基准值小的,放在左边,比基准值大的,放在右边,然后递归将两边快速排序

选择排序:每次选出最小的一个,与0交换,然后再次循环找出最小,与1交换

插入排序:构建有序队列,从未排序队列中,依次取出,在有序队列中,寻找合适的位置插入

希尔排序:将数组切割后进行插入排序, 插入排序的进化版

归并排序:分治法,将数组一分为二,分别采用归并排序,(递归调用),归并排序,将两个有序队列合并为一个有序队列, 取两个队列中的最小,相比较

堆排序:利用堆的性质,父节点大于子节点,即堆顶定为最大的数,然后将堆顶与堆尾互换位置,堆尾为有序区,然后重新构建堆,直至堆有序

计数排序:要求数组为固定范围内整数,取出最大和最小的数,从最小循环最大,记录每个数出现的次数,将所有次数相加,然后循环记录的数组,依次填入新的数组

桶排序:待排序列划分成一段一段的范围,依次将每一个元素放入其指定的范围,然后将每一个小范围中的数进行排序,然后依次输出

基数排序:取得最大数的,位数 例如874 位三位,依次比较,个位,十位,百位,然后利用技术排序

 

 

 

2.  Hash原理 

jdk1.7 如何保证 时间复杂度 O(1)

经过查找资料后得出的结论

HashMap的时间复杂度O(1) 只是理想状态,即无hash碰撞, 最次状态下时间复杂度为链表O(n)

在HashMap中,如果容量为n  最次状态下, 所有key 发生hash碰撞,则链表长度最多为 负载因子*n

再添加时,在jdk1.8中则转换为红黑树

而要保证时间复杂度,只有程序中控制key尽量不发生hash碰撞,

 

posted @ 2018-10-29 20:57  我是小明呀嘿  阅读(101)  评论(0编辑  收藏  举报