大家好我是老莫,也可以叫我 Kyle

为什么要写这个主题?

之前在寻找实习职缺的过程中,遇到几次当面或者电话面试考资料结构与算法等技术题,测验结束才发现自己没有透彻了解这些概念,有些概念懂了却不知道怎么用程式语言实作出来,想当然面试结果并不理想。因此我决定设定这样的主题,并以自己最擅长的语言 JavaScript 将资料结构或算法实作出来,除了能够了解背后的概念外,也有能力可以透过程式语言实作出来,并利用这些概念去解决真实状况遇到的技术问题。

主题涵盖的范围?

这次 “JS 学资料结构与算法” 系列预计会包含以下范围:

其中各类别可能又会往下细分子类别依次介绍(如排序下细分各种排序法),我想这会是一个漫长的主题,但相信踏实地走完这趟旅程一定会让基础更加扎实,也能帮助像我一样对这些观念一知半解的读者能有更透彻的理解,如果对这个主题有兴趣的朋友们记得追踪我啰!

快速排序法的效率和基准值 (Pivot) 的选择息息相关,每次选择的基准值 (Pivot) 愈接近数列的平均值或中位数愈好。

O(n log n),第一个基准值的位置刚好是中位数,将资料均分成二等份。

Ο(n^2),当资料的顺序恰好为由大到小或由小到大时,此时有分割跟没有分割并没有区别,反而做了多余的操作。

最后必须要强调的是,同一种算法其实有无数种解题方式,上面的解法不过是其中一种,并且未必是最好的解法,虽然确实可以达到排序的目的,但是也许在效能或内存运用却仍有可以改善的空间。因此如果你们发现上面解法可以改进的地方,欢迎讨论,如果你对这个系列有兴趣,也想跟我一起透过 JavaScript 强化自己对于资料结构与算法的基础,欢迎订阅我,如果觉得这篇文章对你有帮助,也不要吝啬帮我拍拍手吧!