码迷,mamicode.com
首页 > 编程语言 > 详细

js 排序:sort()方法、冒泡排序、二分法排序。

时间:2015-12-09 01:53:23      阅读:245      评论:0      收藏:0      [点我收藏+]

标签:

js中的排序,这里介绍三种,sort()方法、冒泡排序、二分法排序。

1、sort方法

写法:  数组.sort(); 返回排好序的数组,如果数组里是数字,则由小到大,如果是字符串,就按照第一个字符的字符编码大小排序。

写法2: 数组.sort(function(a,b){ return a-b }); 表示从大到小,(如果写 retrun b-a 则由大到小排序);

不详细解释了。

2、冒泡排序。

原理是,直接将原理可能不好懂,我们还是按照下面的方法去讲吧,这样容易懂些。

//冒泡排序
function
quickSort(arr){ for(var i=0; i<arr.length-1; i++){ console.log(i); for(var j=0; j<arr.length-i-1; j++){ if(arr[j] > arr[j+1]){ var oldVal = arr[j]; arr[j] = arr[j+1]; arr[j+1] = oldVal; } } } }

我们假设要排序的数组是arr = [10, 8, 7, 6];

原理:

这里arr长为3,外层循环三次,当外层for循环第一次循环的时候,即i=0的时候,进入里层循环,这时候将arr循环3次(4-0-1 = 3),即将arr的第一个数挨个于后面三个数比较,如果它大于后面的某个数,就与其交换位置,这次循环结束后,arr变成了[8, 7, 6, 10];

然后开始外层的i=1的循环,进入内层循环的时候,将arr 循环2次(4-1-1 =2),即,将arr第一数与后面的两个数比较并交换位置,这次循环结束后,arr变成了[7, 6, 8 10];

然后开始完成的i=2的循环,进入内层循环的时候,将arr 循环1次(4-2-1 =1),即,将arr第一数与后面的两个数比较并交换位置,这次循环结束后,arr变成了[6, 7, 8 10];

这样就排好序了,其实原理很简单,就是利用内层循环将arr的第一个往后比较,大则后移,一次循环以后,最大的就再最后面了,这时我们只需要把前面3个再次进行比较,最大的放到倒数第二位,然后再把最前面2个进行比较,这样只需要再套一层循环让内层for循环的可以每次循环减少1个比较长度直到最前面两个最小的也比较完成即可。

 

3、二分法排序

方法如下,返回一个由小到大排序后的数组。(原理在代码注释中)

//二分法排序
function
quickSort(arr){ if(arr.length<=1){ return arr; } var nowNober = arr.splice( Math.floor(arr.length/2), 1 ); //取得数组中间的值 var leftArr = []; var reightArr = []; for(var i=0; i<arr.length; i++){ if(parseInt(arr[i])<=nowNober){ leftArr.push(arr[i]); //把比中间值小的放一个数组 }else{ reightArr.push(arr[i]); //把比中间值大的放另一个数组 } } return quickSort(leftArr).concat(nowNober,quickSort(reightArr)) //在对小数组 、 大数组 继续回调上面的分组方法,最后当数组长度只有一的时候,不再往下执行,把返回的单个数组层层拼装新数组,即最后返回的排序好的数组 }


 完!

js 排序:sort()方法、冒泡排序、二分法排序。

标签:

原文地址:http://www.cnblogs.com/chengduxiaoc/p/5031545.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!