关于快速排序 去重的问题

关于快速排序 去重的问题

今天看关于排序的文章时,自己试着写了一下,发现冒泡是真的 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时,使用递归会有栈溢出的错误,可能是因为函数调用过多造成的,因此建议当数据量大时,使用非递归写法

发布了7 篇原创文章 · 获赞 0 · 访问量 145

猜你喜欢

转载自blog.csdn.net/weixin_42685487/article/details/105361977