標籤:冒泡排序 log 表情 apple java class images array logs
排序也是在程式中經常用到的演算法。無論使用冒泡排序還是快速排序,排序的核心是比較兩個元素的大小。如果是數字,我們可以直接比較,但如果是字串或者兩個對象呢?直接比較數學上的大小是沒有意義的,因此,比較的過程必須通過函數抽象出來。通常規定,對於兩個元素x
和y
,如果認為x < y
,則返回-1
,如果認為x == y
,則返回0
,如果認為x > y
,則返回1
,這樣,排序演算法就不用關心具體的比較過程,而是根據比較結果直接排序。
JavaScript的Array
的sort()
方法就是用於排序的,但是排序結果可能讓你大吃一驚:
// 看上去正常的結果:[‘Google‘, ‘Apple‘, ‘Microsoft‘].sort(); // [‘Apple‘, ‘Google‘, ‘Microsoft‘];// apple排在了最後:[‘Google‘, ‘apple‘, ‘Microsoft‘].sort(); // [‘Google‘, ‘Microsoft", ‘apple‘]// 無法理解的結果:[10, 20, 1, 2].sort(); // [1, 10, 2, 20]
(這表情太喜感,忍不住加上)
原來Array的sort()方法預設把所有元素轉換成String 再排序
因為sort也是一個高階函數,我們可以自訂它的規則,
實現數字大小排序
var arr = [10, 20, 1, 2];arr.sort(function (x, y) { if (x < y) { return -1; } if (x > y) { return 1; } return 0;}); // [1, 2, 10, 20]
如果要實現的是反序,傳回值改改就行.
來自文章筆錄:
http://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/0014351226817991a9c08f1ec0a45c99b9209bcfc71b8f6000
JavaScript 排序演算法