深入理解JS实现快速排序和去重


Posted in Javascript onOctober 17, 2016

JS的快速排序和JS去重在面试的时候问的挺多的.下面是我对快速排序的理解,和快速排序,去重的代码.

1.什么是快速排序?

第一步: 快速排序就是去个中间值,把比中间值小的放在左边设为arrLeft,比中间值大的放在右边设为arrRight

第二步: 对arrLeft进行第一步,对arrRight进行第一步.(明显是一个递归嘛,当数组的长度小于2的时候结束)

第三步: 合并arrLeft,中间值,arrRight

quickSort = function(arr){
if(arr.length < ){
return arr;
}
var tmp = arr.splice(Math.floor(arr.length/), )[],
arrLeft = [],
arrRight = [];
for(var i = ; i < arr.length; i++){
if(arr[i] >= tmp){
arrRight.push(arr[i]);
}else{
arrLeft.push(arr[i]);
}
}
return arguments.callee(arrLeft).concat(tmp,arguments.callee(arrRight));
}

2.JS的去重?

大家第一个想到的应该是,循环一次数组,每取到一个值就与后面的比较,如果没有相同的就放入一个新数组里面,这样就去重了

第一种

var unique = function(arr){
var newArr = [];
while(arr.length){
var value = arr.shift();
for(var i = , len = arr.length; i<len; i++){
if(value == arr[i]){
break;
}
}
if(i == len){
newArr.push(value);
}
}
return newArr;
}

但是这样循环了二次,效率不好.下面提供的较好,声明一个对象,数组的值作为对象的属性并赋值为一,然后判断这个对象属性是否存在就行了

第二种

var unique = function(arr){
var arr = [];
var obj = {};
for(var i = , len = a.length; i < len; i++){
if(!obj[a[i]]){
obj[a[i]] = ;
arr.push(a[i]);
}
}
console.log(obj)
return arr;
};

还有一种就是排序并去重 ,这种就更加容易了.判断前面一个值是不是等于后面一个值如果相等,往后移动一位就行了

第三种

var unique = function(arr){
var newArr = [];
for(var i = , len = arr.length; i <len; i++){
if(arr[i] !== arr[i+]){
newArr.push(arr[i]);
}
if(i == len){
newArr.push(arr[i]);
}
}
return newArr;
}

以上所述是小编给大家介绍的JS实现快速排序和去重,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
Jquery 获取表单text,areatext,radio,checkbox,select值的代码
Nov 12 Javascript
javascript管中窥豹 形参与实参浅析
Dec 17 Javascript
js判断登录与否并确定跳转页面的方法
Jan 30 Javascript
jQuery中closest和parents的区别分析
May 07 Javascript
浅谈jquery中的each方法$.each、this.each、$.fn.each
Jun 23 Javascript
canvas绘制表盘时钟
Jan 23 Javascript
Vue computed计算属性的使用方法
Jul 14 Javascript
JS中使用media实现响应式布局
Aug 04 Javascript
Node.js利用断言模块assert进行单元测试的方法
Sep 28 Javascript
React中上传图片到七牛的示例代码
Oct 10 Javascript
jQuery实现基本淡入淡出效果的方法详解
Sep 05 jQuery
Node使用Selenium进行前端自动化操作的代码实现
Oct 10 Javascript
JavaScript中关键字 in 的使用方法详解
Oct 17 #Javascript
Angular 2应用的8个主要构造块有哪些
Oct 17 #Javascript
jQuery表单验证简单示例
Oct 17 #Javascript
jQuery右下角悬浮广告实例
Oct 17 #Javascript
WEB前端实现裁剪上传图片功能
Oct 17 #Javascript
Javascript获取background属性中url的值
Oct 17 #Javascript
JS+HTML5实现的前端购物车功能插件实例【附demo源码下载】
Oct 17 #Javascript
You might like
php str_pad 函数用法简介
2009/07/11 PHP
php下载文件源代码(强制任意文件格式下载)
2014/05/09 PHP
PHP实现懒加载的方法
2015/03/07 PHP
PHP实现微信公众号验证Token的示例代码
2019/12/16 PHP
jquery.simple.tree插件 更简单,兼容性更好的无限树插件
2010/09/03 Javascript
Javascript生成json的函数代码(可以用php的json_decode解码)
2012/06/11 Javascript
jQuery链式操作如何实现以及为什么要用链式操作
2013/01/17 Javascript
js使用数组判断提交数据是否存在相同数据
2013/11/27 Javascript
JavaScript支持的最大递归调用次数分析
2014/06/24 Javascript
jQuery多个input求和的实现方法
2015/02/12 Javascript
jquery实现滑屏大图定时收缩为小banner图片的广告代码
2015/09/02 Javascript
一道JS前端闭包面试题解析
2015/12/25 Javascript
详解JS对象封装的常用方式
2016/12/30 Javascript
JS实现多级菜单中当前菜单不随页面跳转样式而发生变化
2017/05/30 Javascript
微信小程序之页面拦截器的示例代码
2017/09/07 Javascript
静态页面实现 include 引入公用代码的示例
2017/09/25 Javascript
从vue基础开始创建一个简单的增删改查的实例代码(推荐)
2018/02/11 Javascript
详解Vue源码学习之callHook钩子函数
2018/07/25 Javascript
深入浅析Vue中mixin和extend的区别和使用场景
2019/08/01 Javascript
vue回到顶部监听滚动事件详解
2019/08/02 Javascript
JS造成内存泄漏的几种情况实例分析
2020/03/02 Javascript
vue中提示$index is not defined错误的解决方式
2020/09/02 Javascript
浅谈Vue static 静态资源路径 和 style问题
2020/11/07 Javascript
举例讲解Python中的身份运算符的使用方法
2015/10/13 Python
Python模拟脉冲星伪信号频率实例代码
2018/01/03 Python
python爬取网页内容转换为PDF文件
2020/07/28 Python
解决pip install xxx报错SyntaxError: invalid syntax的问题
2018/11/30 Python
PyQt5内嵌浏览器注入JavaScript脚本实现自动化操作的代码实例
2019/02/13 Python
python opencv 二值化 计算白色像素点的实例
2019/07/03 Python
django中使用POST方法获取POST数据
2019/08/20 Python
PyQt5+Caffe+Opencv搭建人脸识别登录界面
2019/08/28 Python
python global关键字的用法详解
2019/09/05 Python
python类中super() 的使用解析
2019/12/19 Python
python连接打印机实现打印文档、图片、pdf文件等功能
2020/02/07 Python
使用Python提取文本中含有特定字符串的方法示例
2020/12/09 Python
vue数据字典取键值项目的字典问题
2022/04/12 Vue.js