深入理解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 相关文章推荐
Microsfot .NET Framework4.0框架 安装失败的解决方法
Aug 14 Javascript
Js实现双击鼠标自动滚动屏幕的示例代码
Dec 14 Javascript
jquery.hotkeys监听键盘按下事件keydown插件
May 11 Javascript
jQuery获取单击节点对象的方法
Jun 02 Javascript
Vue.js第二天学习笔记(vue-router)
Dec 01 Javascript
浅谈Angular的$q, defer, promise
Dec 20 Javascript
分享一个精简的vue.js 图片lazyload插件实例
Mar 13 Javascript
vue绑定设置属性的多种方式(5)
Aug 16 Javascript
jQuery实现简单的下拉菜单导航功能示例
Dec 07 jQuery
基于jQuery实现无缝轮播与左右点击效果
May 13 jQuery
后台使用freeMarker和前端使用vue的方法及遇到的问题
Jun 13 Javascript
JavaScript架构localStorage特殊场景下二次封装操作
Jun 21 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基础知识:类与对象(5) static
2006/12/13 PHP
php XPath对XML文件查找及修改实现代码
2011/07/27 PHP
php实现压缩多个CSS与JS文件的方法
2014/11/11 PHP
PHP QRCODE生成彩色二维码的方法
2016/05/19 PHP
无需数据库在线投票调查php代码
2016/07/20 PHP
Nginx下ThinkPHP5的配置方法详解
2017/08/01 PHP
tp5.1 框架查询表达式用法详解
2020/05/25 PHP
PHP基于openssl实现非对称加密代码实例
2020/06/19 PHP
基于PHP实现短信验证码发送次数限制
2020/07/11 PHP
jquery 插件 人性化的消息显示
2008/01/21 Javascript
jQuery 学习 几种常用方法
2009/06/11 Javascript
javascript showModalDialog 内跳转页面的问题
2010/11/25 Javascript
jquery队列queue与原生模仿其实现方法分享
2014/03/25 Javascript
JavaScript转换二进制编码为ASCII码的方法
2015/04/16 Javascript
jQuery实现只允许输入数字和小数点的方法
2016/03/02 Javascript
郁闷!ionic中获取ng-model绑定的值为undefined如何解决
2016/08/27 Javascript
ES6新特性三: Generator(生成器)函数详解
2017/04/21 Javascript
js图片查看器插件用法示例
2019/06/22 Javascript
js将日期格式转换为YYYY-MM-DD HH:MM:SS
2020/09/18 Javascript
[53:10]完美世界DOTA2联赛决赛日 FTD vs GXR 第二场 11.08
2020/11/11 DOTA
[59:30]完美世界DOTA2联赛PWL S3 access vs LBZS 第二场 12.20
2020/12/23 DOTA
python基础教程之python消息摘要算法使用示例
2014/02/10 Python
python通过nmap扫描在线设备并尝试AAA登录(实例代码)
2019/12/30 Python
Python中用xlwt制作表格实例讲解
2020/11/05 Python
Python ellipsis 的用法详解
2020/11/20 Python
Weblogc domain问题
2014/01/27 面试题
父亲生日宴会答谢词
2014/01/10 职场文书
工作室成员个人发展规划范文
2014/01/24 职场文书
服装设计专业毕业生求职信
2014/04/09 职场文书
工作会议方案
2014/05/21 职场文书
优秀毕业生求职信
2014/06/05 职场文书
手机被没收的检讨书
2014/10/04 职场文书
2015年除四害工作总结
2015/07/23 职场文书
MySQL 重命名表的操作方法及注意事项
2021/05/21 MySQL
Python Django框架介绍之模板标签及模板的继承
2021/05/27 Python
SpringBoot系列之MongoDB Aggregations用法详解
2022/02/12 MongoDB