深入理解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 相关文章推荐
web 页面分页打印的实现
Jun 22 Javascript
javascript hashtable 修正版 下载
Dec 30 Javascript
autoPlay 基于jquery的图片自动播放效果
Dec 07 Javascript
解析DHTML,JavaScript,DOM,BOM以及WEB标准的描述
Jun 19 Javascript
45个JavaScript编程注意事项、技巧大全
Feb 11 Javascript
第二章之Bootstrap 页面排版样式
Apr 25 Javascript
Node.js发送HTTP客户端请求并显示响应结果的方法示例
Apr 12 Javascript
BootStrap Fileinput上传插件使用实例代码
Jul 28 Javascript
Vue 页面状态保持页面间数据传输的一种方法(推荐)
Nov 01 Javascript
Angular2实现的秒表及改良版示例
May 10 Javascript
vue微信分享插件使用方法详解
Feb 18 Javascript
JavaScript 实现继承的几种方式
Feb 19 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
咖啡的植物学知识
2021/03/03 咖啡文化
Discuz 5.0 中读取纯真IP数据库函数分析
2007/03/16 PHP
攻克CakePHP系列一 连接MySQL数据库
2008/10/22 PHP
如何使用Linux的Crontab定时执行PHP脚本的方法
2011/12/19 PHP
php基于mcrypt_encrypt和mcrypt_decrypt实现字符串加密解密的方法
2016/07/12 PHP
详解PHP数据压缩、加解密(pack, unpack)
2016/12/17 PHP
php上传后台无法收到数据解决方法
2019/10/28 PHP
基于JQuery制作的产品广告效果
2010/12/08 Javascript
JavaScript 计算图片加载数量的代码
2011/01/01 Javascript
JS实现获取键盘按下的按键并显示在页面上的方法
2015/11/04 Javascript
深入理解jquery跨域请求方法
2016/05/18 Javascript
JS获取当前页面名称的简单实例
2016/08/19 Javascript
js实现的xml对象转json功能示例
2016/12/24 Javascript
jQuery插件HighCharts实现的2D面积图效果示例【附demo源码下载】
2017/03/15 Javascript
详解vue-router 2.0 常用基础知识点之router.push()
2017/05/10 Javascript
详解js访问对象的属性和方法
2018/10/25 Javascript
JS中创建自定义类型的常用模式总结【工厂模式,构造函数模式,原型模式,动态原型模式等】
2019/01/19 Javascript
layer.open 获取不到表单信息的解决方法
2019/09/26 Javascript
JavaScript switch语句使用方法简介
2019/12/30 Javascript
python消费kafka数据批量插入到es的方法
2018/12/27 Python
Python进阶之@property动态属性的实现
2019/04/01 Python
Python和Anaconda和Pycharm安装教程图文详解
2020/02/04 Python
20行代码教你用python给证件照换底色的方法示例
2021/02/05 Python
用HTML5 Canvas API中的clearRect()方法实现橡皮擦功能
2016/03/15 HTML / CSS
Auchan Direct波兰:欧尚在线杂货店
2016/10/19 全球购物
美国知名的网上鞋类及相关服装零售商:Shoes.com
2017/05/06 全球购物
大学生村官任职感言
2014/01/09 职场文书
给女朋友的道歉信
2014/01/10 职场文书
开业庆典主持词
2014/03/21 职场文书
四风查摆问题及整改措施
2014/10/10 职场文书
证券区域经理岗位职责
2015/04/10 职场文书
2015年精神文明建设工作总结
2015/04/21 职场文书
2016年读书月活动总结范文
2016/04/06 职场文书
阿里云服务器搭建Php+Apache运行环境的详细过程
2021/05/15 PHP
MySQL数据库压缩版本安装与配置详细教程
2021/05/21 MySQL
SQL Server 忘记密码以及重新添加新账号
2022/04/26 SQL Server