今天偶然間看到一個大佬寫的排序,所以就自己動手寫看看。
直入主題:
function sortArr(arr =[]) {
if (arr.length < 2) return arr;
const point = arr[arr.length-1]
const left = arr.filter((v,i) => v <=point && i !== arr.length -1)
const right = arr.filter(v => v >point )
return [...sortArr(left), point, ...sortArr(right)]
}
sortArr([1, 10, 100, 9, 28, 99, 7, 77, 88, 10, 100, 9])
// (12) [1, 7, 9, 9, 10, 10, 28, 77, 88, 99, 100, 100]
思路就是:
找到最后一個數(shù),然后依次和他進行對比。比他小的放在左邊,比他大的放在右邊,然后再把左邊 + 中間 + 右邊 = 排序后的arr
圖解的話,是這樣的(盜圖一張)

WX20190911-205803@2x.png
參考(或者說是學習源)鏈接是:
https://juejin.im/post/5d75b4d45188250c992d5919
記錄一下。
attention
后面我自己調用了一下這個方法,不可行,有性能問題。如果數(shù)組length太大,這個方法花費的時間太長,效率不高。因為filter其實也很耗時的。如果是數(shù)字的話,可能sort方法都比我上面寫那個好使。哈哈哈哈。
一個對算法和鏈表不清不楚的小白,自娛自樂,自己推翻自己。好玩。