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

本文深入探讨了十大经典排序算法,包括冒泡排序、快速排序、选择排序等,以及它们的工作原理和应用场景。同时,文章详细解析了HashMap在JDK1.7中的实现方式,解释了如何通过控制key的hash碰撞来保证时间复杂度O(1)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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碰撞,

 

转载于:https://www.cnblogs.com/li-mzx/p/9873219.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值