基于JavaScript的前端常用排序算法实现(1)
来源:互联网 发布:淘宝店铺女装货源 编辑:程序博客网 时间:2024/06/04 16:36
1.冒泡排序
简介:
冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。它重复地走访要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
算法原理:(从后往前)
1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3.针对所有的元素重复以上的步骤,除了最后一个。
4.持续每次对越来越少的元素重复上面的步骤,知道没有任何一对数字需要比较。
JavaScript代码实现:
function bubbleSort(arr){ var i=0,j=0,temp=0; for(i=1;i<arr.length;i++){ for(j=0;j<arr.length-i;j++){ //>从小打大 //<从大到小 if(arr[j]>arr[j+1]){ temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } } return arr;}alert(bubbleSort([1,3,5,7,2,0,4]));//[0,1,2,3,4,5,7]
2.快速排序
简介:
快速排序是对冒泡排序的一种改进,也是使用最广泛、速度最快的排序方法。原理:
1.在数据集里面选择一个元素作为‘基准’(pivot)。2.所有小于‘基准’的元素,都移到‘基准’的左边;所有大于‘基准’的元素,都移到‘基准’的右边。
3.对‘基准’左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止。
JavaScript实现:
var quickSort = function(arr){ if(arr.length<=1){return arr; } var pivotIndex=Math.floor(arr.length/2); //基准索引值 var pivotValue=arr.splice(pivotIndex,1)[0];//获取基准的数值 var leftValue=[]; //小于基准值的左边数据集 var rightValue=[];//大于等于基准值的右边数据集 for(var i=0;i<arr.length;i++){if(arr[i]<pivotValue){leftValue.push(arr[i]); }else{rightValue.push(arr[i]); } } return quickSort(leftValue).concat([pivotValue],quickSort(rightValue)); //迭代}alert(quickSort([85,24,63,45,17,31,96,50]));
3.二路并归排序算法
简介:
将两个按值有序序列合并成一个按值有序序列,则称之为二路并归排序,其可以分为自底向上和自顶向下的两种排序算法。(1)自顶向下的并归排序,采用递归的方式,方法比较简单(但递归深度太深,一般不适用)
function mergeSort(arr){if(arr.length<=1){return arr;}var privotIndex=Math.floor(arr.length/2);var leftValue=arr.slice(0,privotIndex);var rightValue=arr.slice(privotIndex);if(leftValue=='undefined'&&rightValue=='undefined'){return false;}return merge(mergeSort(leftValue),mergeSort(rightValue));}function merge(leftValue,rightValue){var result=[];while(leftValue.length&&rightValue.length){if(leftValue[0]<=rightValue[0]){result.push(leftValue.shift());}else{result.push(rightValue.shift());}}while (leftValue.length){ result.push(leftValue.shift()); } while (rightValue.length){ result.push(rightValue.shift()); } return result;}var nums=[6,10,1,9,4,8,2,7,3,5];console.log(mergeSort(nums));
(2)上述通过迭代不是最好的实现方式,但下例函数功能与上述的函数相同但是没有使用递归。尽管迭代版本的合并排序算法比递归实现要慢一些,但它并不会像递归版本那样受调用栈限制的影响,把递归算法改用迭代实现是实现栈溢出错误的方法之一。
function merge(left, right) { var result = []; while (left.length && right.length) { if (left[0] < right[0]) result.push(left.shift()); else result.push(right.shift()); } return result.concat(left, right);}function mergeSort(a) { if (a.length === 1) return a; var work = []; for (var i = 0, len = a.length; i < len; i++) work.push([a[i]]); work.push([]); // 如果数组长度为奇数 for (var lim = len; lim > 1; lim = ~~((lim + 1) / 2)) { for (var j = 0, k = 0; k < lim; j++, k += 2) work[j] = merge(work[k], work[k + 1]); work[j] = []; // 如果数组长度为奇数 } return work[0];}console.log(mergeSort([1, 3, 4, 2, 5, 0, 8, 10, 4]));
阅读全文
0 0
- 基于JavaScript的前端常用排序算法实现(1)
- 常用排序算法的javascript实现
- 常用排序算法之javascript实现
- 常用排序算法之JavaScript实现
- 常用排序算法之JavaScript实现
- 常用排序算法之JavaScript实现
- 常用排序算法之JavaScript实现
- 常用排序算法之JavaScript实现
- 常用排序算法之JavaScript实现
- 常用排序算法之JavaScript实现
- 常用排序算法之JavaScript实现
- 常用排序算法之JavaScript实现
- 常用排序算法之JavaScript实现
- 常用排序算法之JavaScript实现
- 常用排序算法之JavaScript实现
- 常用排序算法之JavaScript实现
- 常用排序算法之JavaScript实现
- 常用排序算法之JavaScript实现
- Linux Shell高级技巧(五)
- 51nod 1837 砝码称重 (规律)
- HPU 周练一
- Linux Shell经典实例解析--Oracle启动脚本(上)
- 【前端前沿看点】weex和react native的原生开发之争——对比分析
- 基于JavaScript的前端常用排序算法实现(1)
- 【NOIP2013模拟联考14】图形变换(transform)
- python的os.path模块常用
- 2457: [BeiJing2011]双端队列
- Linux Shell经典实例解析--Oracle启动脚本(下)
- 拓扑排序(Topological Sorting)
- java泛型通配符
- 关联容器(set & multiset & Map& multimap)
- unity导入/播放视频问题