(前2段是碎碎念可直接跳过) coding多年一些常见算法及原理还是记得的,平时习惯了IDE去 “.” 出一些方法,在跳槽面试中让编写算法及优化时也是抓瞎,其实算法原理应该是上动态图片更直观些的,无奈曾经遇到过大神制作的动图没有保存,自己又比较笨拙不会制作,但文章结尾会贴出本人参照较好的文章供大家一起分析。
在此也声明下,本人学习期间会参照一些老师及大神的书籍或博客,个人认为我不懂就要和懂的人学习知识并吸收总结成自己的,这其实没有什么丢人的,所以博客、代码均通过收集资料分析、编写、优化、测试及总结整理后书写博客与大家分享,目的在于自我加深印象,分享及传播知识。希望大家就实际问题相互学习探讨,请勿互掐。
二分插入排序: 也有叫折半插入排序,简而言之还是插入排序,只不过我不逐个比较了,为提高效率,我直接从中间开始,根据大小向不同的方向继续(假设左小右大顺序)从中间开始比较,随着数组从无序变到有序效率越来越高,循环往复,可参照参考博客[1]图解,及参考博客[2]、参考博客[3]、参考博客[4]代码。
(前2段是碎碎念可直接跳过) coding多年一些常见算法及原理还是记得的,平时习惯了IDE去 “.” 出一些方法,在跳槽面试中让编写算法及优化时也是抓瞎,其实算法原理应该是上动态图片更直观些的,无奈曾经遇到过大神制作的动图没有保存,自己又比较笨拙不会制作,但文章结尾会贴出本人参照较好的文章供大家一起分析。
在此也声明下,本人学习期间会参照一些老师及大神的书籍或博客,个人认为我不懂就要和懂的人学习知识并吸收总结成自己的,这其实没有什么丢人的,所以博客、代码均通过收集资料分析、编写、优化、测试及总结整理后书写博客与大家分享,目的在于自我加深印象,分享及传播知识。希望大家就实际问题相互学习探讨,请勿互掐。
归并排序: 主要采用分而治之的方法,将数组从中分割开2部分,1变2,2变4,4变8....分割至不能分割,后在进行合并时排序,可参照参考博客[1]的图解,可参照参考博客[2]的动图。
(前2段是碎碎念可直接跳过) coding多年一些常见算法及原理还是记得的,平时习惯了IDE去 “.” 出一些方法,在跳槽面试中让编写算法及优化时也是抓瞎,其实算法原理应该是上动态图片更直观些的,无奈曾经遇到过大神制作的动图没有保存,自己又比较笨拙不会制作,但文章结尾会贴出本人参照较好的文章供大家一起分析。
在此也声明下,本人学习期间会参照一些老师及大神的书籍或博客,个人认为我不懂就要和懂的人学习知识并吸收总结成自己的,这其实没有什么丢人的,所以博客、代码均通过收集资料分析、编写、优化、测试及总结整理后书写博客与大家分享,目的在于自我加深印象,分享及传播知识。希望大家就实际问题相互学习探讨,请勿互掐。
快速排序: 采用 三数取中法+分治法+挖坑填数
三数取中法: 为提升效率避免分组不合理的情况,比如逆序数组,提前将数组选左中右3个数将数组排序分割,之后再进行分治法排序,图解可参照参考博客[1]的三数取中法 。
分治法: 将数组从中分割开2部分,1变2,2变4,4变8....分割后在进行排序。
挖坑填数: 本质是元素交换。先把基准值挖出来,位置留出来为坑1;从后向前找到比基准小的元素挖出来,此位置为坑2,将元素填到坑1中;从前往后找到比基准大的元素挖出来,此位置为坑3,放到刚才挖的坑2中;将基准值填补到坑3中,然后分治递归快排。总结就是挖了三个坑:坑1(基准坑)、坑2、坑3,有了三块土:土1(基准值)、土2、土3,土2填坑1,土3填坑2,土1(基准值)填坑3,图解可参照参考博客[2]的快速排序。
(前2段是碎碎念可直接跳过) coding多年一些常见算法及原理还是记得的,平时习惯了IDE去 “.” 出一些方法,在跳槽面试中让编写算法及优化时也是抓瞎,其实算法原理应该是上动态图片更直观些的,无奈曾经遇到过大神制作的动图没有保存,自己又比较笨拙不会制作,但文章结尾会贴出本人参照较好的文章供大家一起分析。
在此也声明下,本人学习期间会参照一些老师及大神的书籍或博客,个人认为我不懂就要和懂的人学习知识并吸收总结成自己的,这其实没有什么丢人的,所以博客、代码均通过收集资料分析、编写、优化、测试及总结整理后书写博客与大家分享,目的在于自我加深印象,分享及传播知识。希望大家就实际问题相互学习探讨,请勿互掐。
插入排序: 主要从第2个元素开始向后,选取元素再向前逐个比较,若前面元素比选取元素大,则将前面元素进行后移操作,直到前方元素小于选取元素,将选取元素插入到此位置,然后选取下个元素继续之前操作,可参照参考博客[1]直接插入排序的动图。
(前2段是碎碎念可直接跳过) coding多年一些常见算法及原理还是记得的,平时习惯了IDE去 “.” 出一些方法,在跳槽面试中让编写算法及优化时也是抓瞎,其实算法原理应该是上动态图片更直观些的,无奈曾经遇到过大神制作的动图没有保存,自己又比较笨拙不会制作,但文章结尾会贴出本人参照较好的文章供大家一起分析。
在此也声明下,本人学习期间会参照一些老师及大神的书籍或博客,个人认为我不懂就要和懂的人学习知识并吸收总结成自己的,这其实没有什么丢人的,所以博客、代码均通过收集资料分析、编写、优化、测试及总结整理后书写博客与大家分享,目的在于自我加深印象,分享及传播知识。希望大家就实际问题相互学习探讨,请勿互掐。
冒泡排序: 核心是元素交换。通过元素两两比较进行交换,如此循环往复直至完成,可参照参考博客[1]图解了解过程(这篇写的还是不错的),可参照参考博客[2]动图。