今天偶然间看到一个大佬写的排序,所以就自己动手写看看。
直入主题:
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]
思路就是:
找到最后一个数,然后依次和他进行对比。比他小的放在左边,比他大的放在右边,然后再把左边 + 中间 + 右边 = 排序后的arr
图解的话,是这样的(盗图一张)
参考(或者说是学习源)链接是:
https://juejin.im/post/5d75b4d45188250c992d5919
记录一下。
attention
后面我自己调用了一下这个方法,不可行,有性能问题。如果数组length太大,这个方法花费的时间太长,效率不高。因为filter其实也很耗时的。如果是数字的话,可能sort方法都比我上面写那个好使。哈哈哈哈。
一个对算法和链表不清不楚的小白,自娱自乐,自己推翻自己。好玩。