**思路**
用遞迴實現——先遞進,再回歸
用迴圈實現——想起來比較簡單,實現起來比較複雜
避免看著我會,動手就廢的現象,動手寫一遍比看十遍有用
選擇排序 o(n^2)快速排序 o(n log2 n)(二分法)
歸併排序 o(n log2 n)(二分法)
技術排序 o(n + max)
選擇最大/最小依次進行比較排序,直到排完。
// 遞迴思路
letmin
=(numbers)
=>
else
}// 比較兩個最小值
letminindex
=(numbers)
=>
numbers.
indexof
(min
(numbers)
)// 宣告minindex
letsort
=(numbers)
=>
else
}
若公升序排序以 最大為基準,小的去前面,大的去後面
只需要重複這句話,就排好序了
// 遞迴思路
letquicksort
= arr =>
let pivotindex = math.
floor
(arr.length /2)
;let pivot = arr.
splice
(pivotindex,1)
[0];
let left =
;let right =
;for
(let i =
0; i < arr.length; i++
)else
}return
quicksort
(left)
.concat
([pivot]
,quicksort
(right)
)}
若公升序排序左邊一半排好序,右邊一半排好序
然後把兩邊合併(merge)起來
let
mergesort
= arr =>
let left = arr.
slice(0
, math.
floor
(k/2))
let right = arr.
slice
(math.
floor
(k/2))
return
merge
(mergesort
(left)
,mergesort
(right))}
letmerge
=(a, b)
=>
用乙個雜湊表做記錄,key:value 記錄發現數字n就記n:1,如果再次發現n就加1
最後把雜湊表的key全部打出來,假設n:m,那麼n需要列印m次
let
countsort
= arr =>
, max =
0, result =
for(
let i=
0; i)else
if(arr[i]
> max)
}for
(let j=
0; j<=max; j++)}
}return result
}
js 資料結構
樹是電腦科學中經常用到的一種資料結構。樹是一種非線性的資料結構,以分層的方式儲存資料。二叉樹每個節點的子節點不允許超過兩個。乙個父節點的兩個子節點分別稱為左節點和右節點,通過將子節點的個數限定為2,可以寫出高效的程式在樹中插入 查詢和刪除資料。二叉查詢樹 bst 是一種特殊的二叉樹,相對較小的值儲存...
js資料結構
一 堆疊的概念 在計算機領域中,堆疊是兩種資料結構。棧 佇列優先,先進先出 由作業系統自動分配釋放 存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。堆 先進後出 動態分配的空間 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os 分配方式倒是類似於鍊錶。二 js的...
JS資料結構學習 佇列
佇列是遵循先進先出原則的一組有序的項,與棧的不同的是,棧不管是入棧還是出棧操作都是在棧頂操作,佇列則是在隊尾新增元素,隊頂移除,用乙個圖來表示大概是這樣事的 用乙個更形象的例子就是 排隊服務,總是先排隊的人會先接受服務,當然不考慮插隊的情況 與棧的建立類似,首先建立乙個表示佇列的函式,然後定義乙個陣...