深入理解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 相关文章推荐
体验js中splice()的强大(插入、删除或替换数组的元素)
Jan 16 Javascript
js处理json以及字符串的比较等常用操作
Sep 08 Javascript
禁用Enter键表单自动提交实现代码
May 22 Javascript
jQuery元素选择器用法实例
Dec 23 Javascript
jQuery增加自定义函数的方法
Jul 18 Javascript
JS实现带关闭功能的阿里妈妈网站顶部滑出banner工具条代码
Sep 17 Javascript
详解Angular中$cacheFactory缓存的使用
Aug 19 Javascript
JavaScript实现倒计时跳转页面功能【实用】
Dec 13 Javascript
AngularJs点击状态值改变背景色的实例
Dec 18 Javascript
深入了解javascript 数组的sort方法
Jun 01 Javascript
ES6中let 和 const 的新特性
Sep 03 Javascript
详解Vue中CSS样式穿透问题
Sep 12 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
1982年日本摄影师镜头下的中国孩子 那无忧无虑的童年
2020/03/12 杂记
如何使用PHP实现javascript的escape和unescape函数
2013/06/29 PHP
php将access数据库转换到mysql数据库的方法
2014/12/24 PHP
php将文本文件转换csv输出的方法
2014/12/31 PHP
Yii2 rbac权限控制之rule教程详解
2016/06/23 PHP
JQuery Ajax 跨域访问的解决方案
2010/03/12 Javascript
javascript中的对象创建 实例附注释
2011/02/08 Javascript
FF IE浏览器修改标签透明度的方法
2014/01/27 Javascript
jquery实现动态操作select选中
2015/02/11 Javascript
JavaScript操作Cookie详解
2015/02/28 Javascript
基于jQuery Circlr插件实现产品图片360度旋转
2015/09/20 Javascript
Javascript控制div属性动态变化实例分析
2015/10/08 Javascript
javascript使用 concat 方法对数组进行合并的方法
2016/09/08 Javascript
jQuery实现遮罩层登录对话框
2016/12/29 Javascript
vue数字类型过滤器的示例代码
2017/09/07 Javascript
vue 实现数字滚动增加效果的实例代码
2018/07/06 Javascript
vue.js 双层嵌套for遍历的方法详解, 类似php foreach()
2018/09/07 Javascript
基于Webpack4和React hooks搭建项目的方法
2019/02/05 Javascript
Vue.js计算机属性computed和methods方法详解
2019/10/12 Javascript
jquery 插件重新绑定的处理方法分析
2019/11/23 jQuery
Python模拟百度登录实例详解
2016/01/20 Python
Django自定义认证方式用法示例
2017/06/23 Python
基于Python中capitalize()与title()的区别详解
2017/12/09 Python
Django MEDIA的配置及用法详解
2019/07/25 Python
Python在Matplotlib图中显示中文字体的操作方法
2019/07/29 Python
python读写csv文件并增加行列的实例代码
2019/08/01 Python
解决Django no such table: django_session的问题
2020/04/07 Python
使用SimpleITK读取和保存NIfTI/DICOM文件实例
2020/07/01 Python
HTML5之SVG 2D入门11—用户交互性(动画)介绍及应用
2013/01/30 HTML / CSS
美国最大的户外装备和服装购物网站:Backcountry
2019/10/15 全球购物
暑假实习求职信范文
2013/09/22 职场文书
门前三包责任书
2014/04/15 职场文书
2015年青年教师工作总结
2015/05/25 职场文书
公司处罚决定书
2015/06/24 职场文书
SSM VUE Axios详解
2021/10/05 Vue.js
使用vue判断当前环境是安卓还是IOS
2022/04/12 Vue.js