當(dāng)前位置:
首頁(yè) >
前端技术
> javascript
>内容正文
javascript
JavaScript算法相关
生活随笔
收集整理的這篇文章主要介紹了
JavaScript算法相关
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1. 排序
1.1.冒泡排序
- 每一輪比較,從左至右交換相鄰,每輪結(jié)束,最后一個(gè)為最大
- 下一輪,需要比較的個(gè)數(shù) - 1 j < len - i (范圍動(dòng)態(tài)縮小)
- 共 len - 1 輪比較
冒泡排序算法改進(jìn)思想:
- 個(gè)數(shù)較多的排序,(比如)從第6輪開(kāi)始,數(shù)列已經(jīng)有序,然而排序算法依然會(huì)執(zhí)行第7、8輪直到結(jié)束:添加標(biāo)志,一開(kāi)始為1,只要有交換便置為0,在外層循環(huán)里添加if判斷,if(標(biāo)志為1) { break }
- 當(dāng)序列中某一段在比較之前就已經(jīng)就是有序的:可以在每一輪排序的最后,記錄下最后一次元素交換的位置,那個(gè)位置也就是無(wú)序數(shù)列的邊界,再往后就是有序區(qū)了
- 正反向冒泡排序
循序漸進(jìn)的過(guò)程:
冒泡排序2次改進(jìn)
JavaScript算法(含冒泡排序3次改進(jìn))
1.2. 選擇排序
思想:
- len-1 輪排序
- 每輪排序,選出最小的數(shù),放在最前的位置
1.3. 插入排序
思想: 打牌
1.4. 希爾排序
- 確定一個(gè)增量
-
1.5. 快速排序
- 首先設(shè)定一個(gè)分界值,通過(guò)該分界值將數(shù)組分成左右兩部分。
- 將大于或等于分界值的數(shù)據(jù)集中到數(shù)組右邊,小于分界值的數(shù)據(jù)集中到數(shù)組的左邊。
- 然后,左邊和右邊的數(shù)據(jù)可以獨(dú)立排序。對(duì)于左側(cè)的數(shù)組數(shù)據(jù),又可以取一個(gè)分界值,將該部分?jǐn)?shù)據(jù)分成左右兩部分,同樣在左邊放置較小值,右邊放置較大值。右側(cè)的數(shù)組數(shù)據(jù)也可以做類似處理。
- 重復(fù)上述過(guò)程,可以看出,這是一個(gè)遞歸定義。通過(guò)遞歸將左側(cè)部分排好序后,再遞歸排好右側(cè)部分的順序。當(dāng)左、右兩個(gè)部分各數(shù)據(jù)排序完成后,整個(gè)數(shù)組的排序也就完成了。
1.6. 隨機(jī)排序
- Math.random()得到的是0~1之間的隨機(jī)數(shù);
- sort()可以調(diào)用一個(gè)函數(shù)做為參數(shù),這個(gè)函數(shù)接收(a,b)兩個(gè)參數(shù),
① a<b返回-1 (小于0的值)
② a=b返回0,
③ a>b返回1(大于0的值),
以這樣的規(guī)則返回正負(fù)數(shù)的函數(shù),排序結(jié)果為升序;
- 讓Math.random()隨機(jī)出來(lái)的數(shù)與0.5做為一個(gè)比較,為正為負(fù)的幾率各一半
2. 函數(shù)柯里化
詳解JS函數(shù)柯里化
3. 技巧方法
- 字符串倒序
- 斐波那契
- 數(shù)組最值
總結(jié)
以上是生活随笔為你收集整理的JavaScript算法相关的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java multimap 序列化_C+
- 下一篇: javascript基本功