形象下九個簡單演算法

2021-08-31 01:46:09 字數 1873 閱讀 1046

以下並不一一詳解個個演算法,主要是前天看了下九個基本演算法,一時之間有點記憶不住,可能看了某某演算法後不能聯想騎具體為哪個演算法。但他們並不複雜,只是一次九個,難免會思想會混雜。

所以,本文章主要以為簡介(沒看過這些演算法的不介意用這個去學,畢竟沒詳細介紹),讓人(主要是我自己看的)一看就能聯想起個個演算法具體思路。這些演算法都不難,相信有思路,那麼按照思路就能寫出**,只是熟悉的寫的快點,漂亮整潔點,不熟悉的寫得慢點。

上圖:

待續。。。。

知道具體思路怎樣也沒用,重要在實際應用,那就得看它們的效率問題了。

引用的分析,如下

效能分析和總結

先不分析複雜度為ο(n)的演算法,因為速度太快,而且有些條件限制,我們先分析前六種演算法,即:冒泡,直接插入,二分插入,直接選擇,快速排序和改進型快速排序。

我的分析過程並不複雜,嘗試產生乙個隨機數陣列,數值範圍是0到7fff,這正好可以用c++的隨機函式rand()產生隨機數來填充陣列,然後嘗試不同長度的陣列,同一種長度的陣列嘗試10次,以此得出平均值,避免過多波動,最後用excel對結果進行分析,ok,上圖了。

最差的一眼就看出來了,是冒泡,直接插入和直接選擇旗鼓相當,但我更偏向於使用直接選擇,因為思路簡單,需要移動的元素相對較少,況且速度還稍微快一點呢,從圖中看,二分插入的速度比直接插入有了較大的提公升,但**稍微長了一點點。

令人感到比較意外的是快速排序,3萬點以內的快速排序所消耗的時間幾乎可以忽略不計,速度之快,令人振奮,而改進型快速排序的線跟快速排序重合,因此不畫出來。看來要對快速排序進行單獨分析,我加大了陣列元素的數目,從5萬到150萬,畫出下圖:

可以看到,即便到了150萬點,兩種快速排序也僅需差不多半秒鐘就完成了,實在快,改進型快速排序效能確實有微略提高,但並不明顯,從圖中也能看出來,是不是我設定的最小快速排序元素數目不太合適?但我嘗試了好幾個值都相差無幾。

最後看線性複雜度的排序,速度非常驚人,我從40萬測試到1200萬,結果如圖:

可見稍微調整下演算法,速度可以得到質的飛公升,而不是我們以前所認為的那樣:再快也不會比冒泡法快多少啊?

我最後製作一張表,比較一下這些排序法:

九個Console命令,讓 JS 除錯更簡單

一 顯示資訊的命令 1 2 3 7 8 14 15 最常用的就是 console.log了。二 佔位符 console 上述的集中度支援 printf 的佔位符格式,支援的佔位符有 字元 s 整數 d或 i 浮點數 f 和物件 o 佔位符 作用 s 字串 d or i 整數 f浮點數 o 可展開的 ...

九個Console命令,讓js除錯更簡單

一 顯示資訊的命令 常用console命令title head console.log hello console.info 資訊 console.error 錯誤 console.warn 警告 script body html 最常用的就是console.log了。二 佔位符 console上述...

九個Console命令,讓js除錯更簡單

一 顯示資訊的命令 2 3 7 8 14 15 最常用的就是console.log了。二 佔位符 console上述的集中度支援printf的佔位符格式,支援的佔位符有 字元 s 整數 d或 i 浮點數 f 和物件 o 效果 三 資訊分組 2 3 7 8 25 26 效果 四 檢視物件的資訊 con...