深入理解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 相关文章推荐
java与javascript之间json格式数据互转介绍
Oct 29 Javascript
全面解析Bootstrap表单使用方法(表单控件状态)
Nov 24 Javascript
基于JS实现数字+字母+中文的混合排序方法
Jun 06 Javascript
jQuery实现点击弹出背景变暗遮罩效果实例代码
Jun 24 Javascript
关于vue.js弹窗组件的知识点总结
Sep 11 Javascript
浅谈js控制li标签排序问题 js调用php函数的方法
Oct 16 Javascript
angular十大常见问题
Mar 07 Javascript
基于js文件加载优化(详解)
Jan 03 Javascript
vue 简单自动补全的输入框的示例
Mar 12 Javascript
微信小程序网络请求实现过程解析
Nov 06 Javascript
vue element table中自定义一些input的验证操作
Jul 18 Javascript
关于uniApp editor微信滑动问题
Jan 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
Discuz7.2版的faq.php SQL注入漏洞分析
2014/08/06 PHP
getimagesize获取图片尺寸实例
2014/11/15 PHP
ThinkPHP静态缓存简单配置和使用方法详解
2016/03/23 PHP
JQuery 自定义CircleAnimation,Animate方法学习笔记
2011/07/10 Javascript
jquery统计用户选中的复选框的个数
2014/06/06 Javascript
Easyui form combobox省市区三级联动
2016/01/13 Javascript
JavaScript函数柯里化详解
2016/04/29 Javascript
Vue.js实现移动端短信验证码功能
2017/03/29 Javascript
Vue中计算属性computed的示例解读
2017/07/26 Javascript
angular中的cookie读写方法
2017/08/02 Javascript
JS实现页面内跳转的简单代码
2017/09/03 Javascript
input 标签实现输入框带提示文字效果(两种方法)
2017/10/09 Javascript
JS加密插件CryptoJS实现的DES加密示例
2018/08/16 Javascript
浅谈VUE单页应用首屏加载速度优化方案
2018/08/28 Javascript
vue递归组件实战之简单树形控件实例代码
2019/08/27 Javascript
[06:04]DOTA2英雄梦之声Vol19卓尔游侠
2014/06/20 DOTA
[04:13]2018国际邀请赛典藏宝瓶Ⅱ饰品一览
2018/07/21 DOTA
python构造icmp echo请求和实现网络探测器功能代码分享
2014/01/10 Python
利用Python中SocketServer 实现客户端与服务器间非阻塞通信
2016/12/15 Python
pandas 实现将重复表格去重,并重新转换为表格的方法
2018/04/18 Python
Django配置celery(非djcelery)执行异步任务和定时任务
2018/07/16 Python
python利用Tesseract识别验证码的方法示例
2019/01/21 Python
详解如何管理多个Python版本和虚拟环境
2019/05/10 Python
Python列表元素常见操作简单示例
2019/10/25 Python
CSS3打造百度贴吧的3D翻牌效果示例
2017/01/04 HTML / CSS
澳大利亚领先的时尚内衣零售商:Bras N Things
2020/07/28 全球购物
JNI的定义
2012/11/25 面试题
英文简历自荐信范文
2013/12/11 职场文书
高中化学教学反思
2014/01/13 职场文书
中式餐厅创业计划书范文
2014/01/23 职场文书
领导班子四风对照检查材料思想汇报
2014/09/26 职场文书
教师群众路线教育实践活动学习笔记
2014/11/05 职场文书
2014年幼儿园教师工作总结
2014/11/08 职场文书
明星邀请函
2015/02/02 职场文书
Python+Matplotlib图像上指定坐标的位置添加文本标签与注释
2022/04/11 Python
Windows server 2022创建创建林、域树、子域的步骤
2022/06/25 Servers