深入理解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的实现回车键Enter切换焦点
Sep 14 Javascript
体验js中splice()的强大(插入、删除或替换数组的元素)
Jan 16 Javascript
jquery控制display属性为none或block
Mar 31 Javascript
简介JavaScript中search()方法的使用
Jun 06 Javascript
javascript实现label标签跳出循环操作
Mar 06 Javascript
分分钟玩转Vue.js组件(二)
Mar 01 Javascript
使用bootstrap插件实现模态框效果
May 10 Javascript
webpack之devtool详解
Feb 10 Javascript
在vue组件中使用axios的方法
Mar 16 Javascript
解决Angular2 router.navigate刷新页面的问题
Aug 31 Javascript
node.js监听文件变化的实现方法
Apr 17 Javascript
Vue中rem与postcss-pxtorem的应用详解
Nov 20 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
PHP5 面向对象程序设计
2008/02/13 PHP
PHP数据类型的总结分析
2013/06/13 PHP
PHP扩展CURL的用法详解
2014/06/20 PHP
php+mysql+jquery实现日历签到功能
2017/02/27 PHP
解决php-fpm.service not found问题的办法
2017/06/06 PHP
PHP ADODB生成HTML表格函数rs2html功能【附错误处理函数用法】
2018/05/29 PHP
jQuery之排序组件的深入解析
2013/06/19 Javascript
浅析JavaScript中的typeof运算符
2013/11/30 Javascript
JQuery对表单元素的基本操作使用总结
2014/07/18 Javascript
讲解JavaScript中for...in语句的使用方法
2015/06/03 Javascript
JavaScript编程学习技巧汇总
2016/02/21 Javascript
Jquery zTree 树控件异步加载操作
2016/02/25 Javascript
适用于手机端的jQuery图片滑块动画
2016/12/09 Javascript
讲解vue-router之什么是动态路由
2018/05/28 Javascript
解决vue的 v-for 循环中图片加载路径问题
2018/09/03 Javascript
独立部署小程序基于nodejs的服务器过程详解
2019/06/24 NodeJs
用Python脚本生成Android SALT扰码的方法
2013/09/18 Python
删除DataFrame中值全为NaN或者包含有NaN的列或行方法
2018/11/06 Python
Keras使用tensorboard显示训练过程的实例
2020/02/15 Python
利用PyQt5+Matplotlib 绘制静态/动态图的实现代码
2020/07/13 Python
Python Map 函数的使用
2020/08/28 Python
HTML5语音识别标签写法附图
2013/11/18 HTML / CSS
Ellos瑞典官网:北欧地区时尚、美容和住宅领域领先的电子商务网站
2019/11/21 全球购物
测绘工程个人的自我评价
2013/11/23 职场文书
办公室文员工作职责
2014/01/31 职场文书
团日活动总结
2014/04/28 职场文书
责任心演讲稿
2014/05/14 职场文书
班级心理活动总结
2014/07/04 职场文书
制冷与空调专业毕业生推荐信
2014/07/07 职场文书
个人批评与自我批评范文
2014/10/17 职场文书
党支部审查意见
2015/06/02 职场文书
幽灵公主观后感
2015/06/09 职场文书
创业计划书之香辣虾火锅
2019/09/23 职场文书
Python爬取科目四考试题库的方法实现
2021/03/30 Python
Vue提供的三种调试方式你知道吗
2022/01/18 Vue.js
Golang 实现 WebSockets 之创建 WebSockets
2022/04/24 Golang