js中的排序
不靠谱的sort()
众所周知,js中的sort()排序是按字母表顺序排序的,这就导致如下现象:
var a = [9,60,111,55,8,7777];
a.sort();
alert(a); //排序结果:111,55,60,7777,8,9
于是乎我们增加了一个比较函数compare:
function compare(a,b){ //增加的对比函数compare
return a-b; //返回1,-1或0
} var a = [9,60,111,55,8,7777];
a.sort(compare);
alert(a); //8,9,55,60,111,7777 正常排序
快速排序
快速排序是目前被认为效率最高的排序算法,也是面试常考察的知识点,其核心思想是:取中间值做为参考值,比它小的放在其左边,比它大的放在右边,这样经过一次排序后左边都小于右边,下一步再对左右两边分别执行同样的算法,也就是以上次分好的半边为单位取中间值再进行比较,归位,就这样分一半,又分一半,直到再也分不了半,数据变为单个的个体为止。这样每个左边都小于右边,就实现了排序:
var quickSort = function(arr){
if(arr.length <= ) //长度小于1,不用排序
{
return arr;
}
var pivotIndex = Math.floor(arr.length/);//截取数组长度的一半
var pivot = arr.splice(pivotIndex,); //获取中间值,用此值作为参考,对比各元素
var left = []; //新建数组left存入小于中间值的数据
var right = [];//新建数组right存入大于中间值的数据
for(var i = ; i<arr.length; i++)
{
if(arr[i]<pivot)
{ //判断大小用以选择存入大小哪个数组
left.push(arr[i]);
}
else
{
right.push(arr[i]);
}
}
//核心代码,用到了递归,以新得出的left,right数组作为参数,再次执行quickSort算法函数
return quickSort(left).concat([pivot],quickSort(right));//注意[pivot],合并时要把中间值放在两数组中间
}
alert(quickSort([,,,,,,]));
js中的排序的更多相关文章
- JS中常见排序算法详解
本文将详细介绍在JavaScript中算法的用法,配合动图生动形象的让你以最快的方法学习算法的原理以及在需求场景中的用途. 有句话怎么说来着: 雷锋推倒雷峰塔,Java implements Java ...
- js中各个排序算法和sort函数的比较
js中要实现数据排序,其实只需要用sort函数就能很好的满足了,但是我今天想知道他和其他排序算法的区别,比如耗时呀等.测了一组数据如下: // ---------- 一些排序算法 Sort = {} ...
- JS中对象排序
详细代码如下: var s=[{name:"abc",value:10},{name:"dbc",value:5},{name:"acc", ...
- 关于js中sort()排序方法
第一次写这个,算是记录自己的学习前端的一点点的历程吧.今天在做一个图片的随机排序遇到了一个问题,部分截图如下 我用的是json格式存储数组,想通过排序实现img数组中的内容升序或是降序发现用sort自 ...
- JS中的排序算法-冒泡排序解析
冒泡排序算法 例子:10,8,9,6,4,20,5 从小到大排序 第一轮 1)10>8 交换数据 得到:8,10,9,6,4,20,5 2)10>9 交换数据 得到:8,9,10, ...
- js中的排序方法
一.冒泡排序 var arr=[22,1,33,19,77]; function bubbleSort(arr){ for(var i=0;i<arr.length-1;i++){ for( ...
- js中对象的自定义排序
//并返回一个可以用来对包含该成员的对象数组进行排序的比较函数 var compareAsc = function (prop) { return function (obj1, obj2) { va ...
- js中json对象数组按对象属性排序---1
转载:https://www.cnblogs.com/jasonwang2y60/p/6656103.html 在实际工作经常会出现这样一个问题:后台返回一个数组中有i个json数据,需要我们根据js ...
- js中json对象数组按对象属性排序
在实际工作经常会出现这样一个问题:后台返回一个数组中有i个json数据,需要我们根据json中某一项进行数组的排序. 例如返回的数据结构大概是这样: { result:[ {id:,name:'中国银 ...
随机推荐
- MySql批量更新方法
准备数据 表 user(用户).dept(部门) 1:更新符合单个条件的某个字段的一条数据 update user u set u.name = '测试' where u.id = "&qu ...
- VisualSFM for Structure from Motion
VisualSFM是Changchang Wu编写的使用 Structure from Motion (SfM)进行3D重建的交互界面,具体内容详见http://homes.cs.washington ...
- 如何修改Windows Azure Web App的时区
Windows Azure的时区默认使用UTC,如果是VM可以直接修改,但Azure Web Apps的隔离性导致我们无法进行设置.应用系统使用DateTime.Now的地方很多,不可能做出一一修改. ...
- 让我们一起Go(十二)
前言: 上篇中,我们讲到了在Go语言中如何定义方法,今天,我们将进一步深入Go语言的面向对象编程. 一.Go语言中的接口 首先来看一个最基本的接口: 和定义一个结构体类似,只不过将struct换成了i ...
- ARM Linux 3.x的设备树(Device Tree)
1. ARM Device Tree起源 Linus Torvalds在2011年3月17日的ARM Linux邮件列表宣称“this whole ARM thing is a f*cking pai ...
- aliyun ubuntu mysql
http://www.codingyun.com/article/38.html ------------ python install mysql module ubuntu下mysql-pytho ...
- 超实用的8个Linux命令行性能监测工具
http://www.csdn.net/article/2012-09-17/2810047-command-line-tools-to-monitor-linux-perf 你值得拥有:25个Lin ...
- Unity 中的协同程序
今天咱就说说,协同程序coroutine.(这文章是在网吧敲的,没有unity,但是所有结论都被跑过,不管你信得过我还是信不过我,都要自己跑一下看看,同时欢迎纠错)先说说啥是协程:协同程序是一个非常让 ...
- STL中的算法小结
()要运用STL的算法,首先必须包含头文件<algorithm>,某些STL算法用于数值处理,因此被定义于头文件<numeric> ()所有STL算法都被设计用来处理一个或多个 ...
- ruby -- 进阶学习(四)paperclip上传中文命名图片
Paperclip -- 上传中文命名图片 使用Paperclip和ImageMagick插件来处理图片的时候,上传非中文命名的图片时,只要把配置写好就没问题 if you need to ...