深入理解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实现滚动鼠标放大缩小图片的方法(附demo源码下载)
Mar 05 Javascript
JavaScript操作选择对象的简单实例
May 16 Javascript
Js遍历键值对形式对象或Map形式的方法
Aug 08 Javascript
详解Node.js:events事件模块
Nov 24 Javascript
jQuery弹出div层过2秒自动消失
Nov 29 Javascript
vue实现select下拉显示隐藏功能
Sep 30 Javascript
JS如何实现动态添加的元素绑定事件
Nov 12 Javascript
js实现简单选项卡制作
Aug 05 Javascript
JavaScript如何操作css
Oct 24 Javascript
JavaScript中clientWidth,offsetWidth,scrollWidth的区别
Jan 25 Javascript
分享15个Webpack实用的插件!!!
Mar 31 Javascript
GitHub上77.9K的Axios项目有哪些值得借鉴的地方详析
Jun 15 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入门小知识
2008/03/24 PHP
PHP5中新增stdClass 内部保留类
2011/06/13 PHP
PHP生成不同颜色、不同大小的tag标签函数
2013/09/23 PHP
ThinkPHP模板循环输出Volist标签用法实例详解
2016/03/23 PHP
laravel按天、按小时,查询数据的实例
2019/10/09 PHP
js 自制滚动条的小例子
2013/03/16 Javascript
浏览器打开层自动缓慢展开收缩实例代码
2013/07/04 Javascript
用jquery统计子菜单的条数示例代码
2013/10/18 Javascript
JS合并数组的几种方法及优劣比较
2014/09/19 Javascript
JavaScript中的索引数组、关联数组和静态数组、动态数组讲解
2014/11/08 Javascript
vue.js入门教程之绑定class和style样式
2016/09/02 Javascript
Vuex2.0+Vue2.0构建备忘录应用实践
2016/11/30 Javascript
AngularJS实践之使用ng-repeat中$index的注意点
2016/12/22 Javascript
JS正则匹配中文的方法示例
2017/01/06 Javascript
angular实现表单验证及提交功能
2017/02/01 Javascript
原生JS实现图片网格式渐显、渐隐效果
2017/06/05 Javascript
关于JS与jQuery中的文档加载问题
2017/08/22 jQuery
微信小程序异步处理详解
2017/11/10 Javascript
vue中echarts3.0自适应的方法
2018/02/26 Javascript
解决jQuery使用append添加的元素事件无效的问题
2018/08/30 jQuery
vue项目实现表单登录页保存账号和密码到cookie功能
2018/08/31 Javascript
从零使用TypeScript开发项目打包发布到npm
2020/02/14 Javascript
[01:08:56]DOTA2-DPC中国联赛 正赛 Magma vs LBZS BO3 第一场 2月7日
2021/03/11 DOTA
python读取word文档的方法
2015/05/09 Python
Python中IPYTHON入门实例
2015/05/11 Python
Python编程求解二叉树中和为某一值的路径代码示例
2018/01/04 Python
如何安装2019Pycharm最新版本(详细教程)
2019/09/26 Python
Python Pandas对缺失值的处理方法
2019/09/27 Python
Python+OpenCV实现旋转文本校正方式
2020/01/09 Python
英国地毯卖家:The Rug Seller
2019/07/18 全球购物
Zooplus罗马尼亚:宠物食品和配件
2019/11/02 全球购物
公务员的自我鉴定
2013/10/26 职场文书
高中学生干部学习的自我评价
2014/02/21 职场文书
安全责任书范本
2014/04/15 职场文书
百日宴上的祝酒词
2015/08/10 职场文书
病假条格式范文
2015/08/17 职场文书