希爾排序(Shell Sort)演算法,改良的插入排序法 2019 年 4 月 5 日 Magic Len 研究分享、 Go、 Java、 Rust、 演算法、 JavaScript 希爾排序(Shell Sort)演算法是插入排序(Insertion Sort)演算法的改良版。它解決了插入排序法一次只能把元素移動一個索引距離的問題,加入間距(gap)的概念來分批並分組完成插入排序法,有效提升原本插入排序法的速度。 繼續閱讀
雞尾酒排序(Cocktail Sort)演算法,雙向的氣泡排序法 2019 年 4 月 5 日 Magic Len 研究分享、 Go、 Java、 Rust、 演算法、 JavaScript 雞尾酒排序(Cocktail Sort)演算法又稱為搖晃排序(Shaker Sort)演算法、雙向氣泡排序(Bidirectional Bubble Sort)演算法,顧名思義,它是氣泡排序(Bubble Sort)演算法的變體,將原本單向走訪的氣泡排序改為雙向,用以解決使用氣泡排序法時,序列中未排序的一端其實已經大致排序好,卻又不能儘快把它完成的情形。 繼續閱讀
插入排序(Insertion Sort)演算法,一邊將元素加進序列、一邊進行排序的演算法 2019 年 4 月 5 日 Magic Len 研究分享、 Go、 Java、 Rust、 演算法、 JavaScript 插入排序(Insertion Sort)演算法,是基本的排序演算法,是學習程式語言最先需要學會的排序演算法之一。插入排序法的用途廣泛,除了可以用來將新元素添加到已存在且已排序好的序列並維持其排序外,還可以用來排序尚未排序的序列。而且其排序結果是穩定的。 繼續閱讀
氣泡排序法(Bubble Sort)演算法,容易實作的穩定排序演算法 2019 年 4 月 5 日 Magic Len 研究分享、 Go、 Java、 Rust、 演算法、 JavaScript 氣泡排序(Selection Sort)演算法又稱為泡沫排序演算法,是基本的排序演算法,是學習程式語言最先需要學會的排序演算法之一。顧名思義,就是它的排序方式如同氣泡一般,不斷將最大的元素擠出(移動)到序列最尾端,當所有元素都被被擠出後,排序就完成了!而且排序結果是穩定的。 繼續閱讀
選擇排序(Selection Sort)演算法,最簡單的排序演算法 2019 年 4 月 5 日 Magic Len 研究分享、 Go、 Java、 Rust、 演算法、 JavaScript 選擇排序(Selection Sort)演算法是最基本的排序演算法,是學習程式語言最先需要學會的排序演算法之一。它可以按照元素值的大小序次,一一將最小值、第二小值等等的元素排入序列中的正確索引位置內。 繼續閱讀
快速排序(Quick Sort)演算法,瞬間就可以排好超大序列! 2019 年 4 月 4 日 Magic Len 研究分享、 Go、 Java、 Rust、 演算法、 JavaScript 快速排序(Quick Sort)演算法又稱為劃分交換排序(Partition-Exchange Sort)演算法,是實用性很高的排序演算法,它可以在O(nlogn)的時間複雜度完成排序,雖然是不穩定排序,但它的速度完全可以彌補這個缺點。 繼續閱讀
Bogo排序(Bogo Sort)演算法,慢到會想笑排序演算法 2019 年 4 月 1 日 Magic Len Go、 Java、 Rust、 演算法、 JavaScript Bogo排序(Bogo Sort)演算法又稱為猴子排序(Monkey Sort)演算法,顧名思義,是非常愚蠢的排序演算法,就像是請猴子幫忙排序一樣。 繼續閱讀
如何有效率地寫程式判斷質數和尋找質數? 2018 年 10 月 14 日 Magic Len 研究分享、 Go、 Java、 數學邏輯、 Rust、 JavaScript 一個質數(Prime)是一個大於1,且無法找到除了自己本身和1之外的自然數能整除它的自然數。舉例來說,2、3、5、7、11、13和17均為質數。質數是數學上的難題,即便數學已經過幾千年的發展,卻也還是無法找出一個能完美產生出質數的函數。在學習寫程式的過程中,儘管在現實社會中幾乎用不到,我們還是會常常遇到判斷質數或是尋找質數的問題。那麼,究竟要如何利用程式來處理判斷質數和尋找質數呢? 繼續閱讀
計數排序法(Counting Sort),只需線性時間就能完成的超快排序法 2017 年 10 月 21 日 Magic Len 研究分享、 Go、 Java、 Rust、 演算法、 JavaScript 計數排序(Counting Sort)演算法是不需進行比較的排序演算法,顧名思義,它會去數元素的數量來進行排序。這種排序法只需要線性時間和空間的複雜度就可以完成排序,比時間複雜度為O(nlogn)的演算法還快,而且作法也不會太難。雖然如此,計數排序法是並不算是常見的排序演算法,因為它只能用來排序已知數值範圍的序列(由於要直接對應序列的索引值,所以這組數值通常會是一組整數)。舉例來說,已知序列中的每... 繼續閱讀
快速選擇(Quickselect)演算法,快速尋找第K小或是第K大的元素 2016 年 5 月 24 日 Magic Len 研究分享、 Go、 Java、 Rust、 演算法、 JavaScript 快速選擇(Quickselect)演算法是利用快速排序(Quick Sort)演算法,在排序序列的同時,選擇出序列中第K小或是第K大的元素。若我們只想要從序列中找出一個第K小或是第K大元素,使用快速選擇法會比使用快速排序法來得快很多,因為前者不需要把序列的排序完整做完,平均只需線性時間即可找到結果。 繼續閱讀