关于快速排序 去重的问题
今天看关于排序的文章时,自己试着写了一下,发现冒泡是真的 TM
的慢。。。
另外,关于 快速排序
如果根据 网上普遍的写法,即
function quick(arr) {
if (arr.length <= 1) return arr;
var index = Math.floor(arr.length / 2),
point = arr.splice(index, 1)[0],
left = [],
right = [];
for (var i = 0; i < arr.length; i++) {
if (arr[i] > point) {
right.push(arr[i]);
}
if (arr[i] < point) {
left.push(arr[i]);
}
}
return quick(left).concat(point, quick(right));
}
除了排序之外,甚至可以起到去重的效果。。。
原因好像是因为,在比较那块,如果只是 >
或 <
的话,并没有将相等的元素包含进去,如果想关闭这个 “功能” 只需改为 >=
或者 <=
即可
最后,如果数据量特别大,如1000000时,使用递归会有栈溢出的错误,可能是因为函数调用过多造成的,因此建议当数据量大时,使用非递归写法