Search和Sort是最基础的算法,基础但重要!
Search的话,binary search最简单实用。
Sort,上面是常用sort对比,看图,其实也没啥可说的了。
注:1、bubble、selection和insert sort统称为简单排序,优点是程序相对简单、好写,但时间复杂度较差O(N^2);
2、稳定排序(排序时,相同元素不调换位置):bubble、insert、merge和radix sort是稳定的;不稳定是因为元素调换位置时的间隔大于1(选择排序和希尔排序可以较明显看出);
3、Shell sort基于insert sort,其时间复杂度由其程序中的递减间隔序列决定,最好也是O(N^2);heap sort基于selection sort,看起来其时间复杂度还不错,但是实际中和快速排序哪个更快,还得看情况;
4、quick search,可以称之为网红排序。数据量较大时可用,但数据量较小时不如用插入排序。步骤:选主元—划分子集—递归分治,其中选主元可以用不同方法如:直接取左|右端元素、Median3等方法;
5、merge sort除了要用额外空间O(N)外,都挺不错;
6、radix sort基于bucket sort,只是按基数去选择bucket,在某些情况下,其可以达到线性时间复杂度;
7、search 和 sort除了在要用的时候灵活使用外,重要的就是其时间、空间复杂度、稳定性、使用(情况)条件等。某些情况下(如面试),这些算法(套路)及其特点(白纸上)写到、背到滚挂烂熟,会是一个漂亮的开始……
编程=算法+数据结构,编程就像做菜,数据结构是食材,算法是食谱,想把菜做好,备上好食材、好食谱,然后练吧。
面试时,考官有可能让现场在黑板上写程序,边写边和考官讨论效果较好。但前提是得准备好,提前疯狂在白纸上和PC环境(leetcode啥的)上刷题是最直接的方法。
恩……想必这些大家都知道,可以,就差行动了……
本渣要去学习,88……
GitHub: https://github.com/666DZY666/Algorithm-and-Data-Structure
公众号:https://mp.weixin.qq.com/s/TPHLkR-NmUBURTIhMiSs2w