深入理解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 相关文章推荐
javascript设计模式 封装和信息隐藏(上)
Jul 24 Javascript
js实现拖拽 闭包函数详细介绍
Nov 25 Javascript
js获取当月最后一天实例代码
Nov 19 Javascript
jQuery学习笔记之jQuery原型属性和方法
Jun 09 Javascript
基于jQuery滑动杆实现购买日期选择效果
Sep 15 Javascript
jQuery插件easyUI实现通过JS显示Dialog的方法
Sep 16 Javascript
原生js实现弹出层效果
Jan 20 Javascript
vuejs指令详解
Feb 07 Javascript
iscroll-probe实现下拉刷新和下拉加载效果
Jun 28 Javascript
create-react-app修改为多页面支持的方法
May 17 Javascript
详解JavaScript中的坐标和距离
May 27 Javascript
vue 导航内容设置选中状态样式的例子
Nov 01 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 array_intersect()函数使用代码
2009/01/14 PHP
PHP代码网站如何防范SQL注入漏洞攻击建议分享
2012/03/01 PHP
php单例模式示例分享
2015/02/12 PHP
PHP版微信公众平台红包API
2015/04/02 PHP
php使用substr()和strpos()联合查找字符串中某一特定字符的方法
2015/05/12 PHP
php写app用的框架整理
2019/09/29 PHP
解决FLASH需要点击激活的代码
2006/12/20 Javascript
jquery入门—数据删除与隔行变色以及图片预览
2013/01/07 Javascript
JavaScript实现基于Cookie的存储类实例
2015/04/10 Javascript
js实现仿百度汽车频道选择汽车图片展示实例
2015/05/06 Javascript
JavaScript中Null与Undefined的区别解析
2015/06/30 Javascript
探究Javascript模板引擎mustache.js使用方法
2016/01/26 Javascript
jQuery解决IE6、7、8不能使用 JSON.stringify 函数的问题
2016/05/31 Javascript
微信小程序 登陆流程详细介绍
2017/01/17 Javascript
NodeJS仿WebApi路由示例
2017/02/28 NodeJs
基于vue循环列表时点击跳转页面的方法
2018/08/31 Javascript
原生JS实现轮播图效果
2018/10/12 Javascript
vue中格式化时间过滤器代码实例
2019/04/17 Javascript
详解react组件通讯方式(多种)
2020/05/06 Javascript
vue实现从外部修改组件内部的变量的值
2020/07/30 Javascript
Vue实现点击导航栏当前标签后变色功能
2020/08/19 Javascript
jQuery实现查看图片功能
2020/12/01 jQuery
[02:42]完美大师赛主赛事淘汰赛第三日观众采访
2017/11/25 DOTA
[01:03:50]DOTA2-DPC中国联赛 正赛 CDEC vs DLG BO3 第二场 2月7日
2021/03/11 DOTA
pygame编写音乐播放器的实现代码示例
2019/11/19 Python
Python Django2.0集成Celery4.1教程
2019/11/19 Python
Python装饰器如何实现修复过程解析
2020/09/05 Python
基于Django快速集成Echarts代码示例
2020/12/01 Python
利用css3实现的简单的鼠标悬停按钮
2014/11/04 HTML / CSS
CSS3实现头像旋转效果
2017/03/13 HTML / CSS
Shell编程面试题
2012/05/30 面试题
有趣的广告词
2014/03/18 职场文书
活动总结模板
2014/05/09 职场文书
国际贸易求职信
2014/07/05 职场文书
HTML通过表单实现酒店筛选功能
2021/05/18 HTML / CSS
Linux系统下MySQL配置主从分离的步骤
2022/03/21 MySQL