今天偶然間看到一個大佬寫的排序,所以就自己動手寫看看纳令。
直入主題:
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
后面我自己調(diào)用了一下這個方法,不可行笆搓,有性能問題性湿。如果數(shù)組length太大纬傲,這個方法花費的時間太長,效率不高肤频。因為filter其實也很耗時的叹括。如果是數(shù)字的話,可能sort方法都比我上面寫那個好使宵荒。哈哈哈哈汁雷。
一個對算法和鏈表不清不楚的小白,自娛自樂骇扇,自己推翻自己摔竿。好玩。