深入理解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 判断代码全收集
Apr 28 Javascript
2012年开发人员的16款新鲜的jquery插件体验分享
Dec 28 Javascript
js验证是否为数字的总结
Apr 14 Javascript
JS实现可改变列宽的table实例
Jul 02 Javascript
js的alert弹出框出现乱码解决方案
Sep 02 Javascript
使用javascript控制cookie显示和隐藏背景图
Feb 12 Javascript
详解javascript事件冒泡
Jan 09 Javascript
微信小程序 获取当前地理位置和经纬度实例代码
Dec 05 Javascript
详解JavaScript中this的指向问题
Jan 20 Javascript
iscroll实现下拉刷新功能
Jul 18 Javascript
vue+echarts实现动态绘制图表及异步加载数据的方法
Oct 17 Javascript
Vue 实现输入框新增搜索历史记录功能
Oct 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查询域名状态whois的类
2006/11/25 PHP
网页上facebook分享功能具体实现
2014/01/26 PHP
PHP实现生成唯一编号(36进制的不重复编号)
2014/07/01 PHP
Windows平台PHP+IECapt实现网页批量截图并创建缩略图功能详解
2019/08/02 PHP
一个简单的js动画效果代码
2010/07/20 Javascript
javascript 星级评分效果(手写)
2012/12/24 Javascript
让angularjs支持浏览器自动填表
2014/11/10 Javascript
JavaScript如何动态创建table表格
2020/08/02 Javascript
Jquery跨浏览器文本复制插件Zero Clipboard的使用方法
2016/02/28 Javascript
jQuery插件EasyUI设置datagrid的checkbox为禁用状态的方法
2016/08/05 Javascript
JavaScript禁止微信浏览器下拉回弹效果
2017/05/16 Javascript
深入理解angular2启动项目步骤
2017/07/15 Javascript
Vue2.0如何发布项目实战
2017/07/27 Javascript
微信小程序 转发功能的实现
2017/08/04 Javascript
vue 里面使用axios 和封装的示例代码
2017/09/01 Javascript
vue单页面打包文件大?首次加载慢?nginx带你飞,从7.5M到1.3M蜕变过程(推荐)
2018/01/16 Javascript
完美解决axios跨域请求出错的问题
2018/02/05 Javascript
微信小程序自定义组件传值 页面和组件相互传数据操作示例
2019/05/05 Javascript
记录一次websocket封装的过程
2020/11/23 Javascript
[01:09:50]VP vs Pain 2018国际邀请赛小组赛BO2 第二场
2018/08/20 DOTA
零基础写python爬虫之使用Scrapy框架编写爬虫
2014/11/07 Python
在Python中利用Pandas库处理大数据的简单介绍
2015/04/07 Python
Python for Informatics 第11章 正则表达式(一)
2016/04/21 Python
pandas系列之DataFrame 行列数据筛选实例
2018/04/12 Python
Python基于滑动平均思想实现缺失数据填充的方法
2019/02/21 Python
Python插件机制实现详解
2020/05/04 Python
keras 自定义loss层+接受输入实例
2020/06/28 Python
python绕过图片滑动验证码实现爬取PTA所有题目功能 附源码
2021/01/06 Python
html5中canvas图表实现柱状图的示例
2017/11/13 HTML / CSS
个人简历中的自我评价范例
2013/10/29 职场文书
GMP办公室主任岗位职责
2014/03/14 职场文书
煤矿班组长竞聘书
2014/03/31 职场文书
继承公证书样本
2014/04/04 职场文书
大学生暑期社会实践证明范本
2014/10/24 职场文书
雷峰塔导游词
2015/02/09 职场文书
2015年世界环境日活动方案
2015/05/05 职场文书