[JS]算法总结

一、冒泡排序

  1. function bubbleSort(arr){
  2. for(var i=1;i<arr.length;i++){//共需要多少轮
  3. for(var j=0;j<arr.length-i;j++){//每i轮过后,都有最后i个数无需再排序,即第1轮过后,最后一个数最大,第2轮过后,最后两个数最大
  4. if(arr[j]>arr[j+1]){//如果前一个数大于后一个,则交换二者的值
  5. arr[j+1]=[arr[j],arr[j]=arr[j+1]][0];
  6. }
  7. }
  8. }
  9. console.log(arr);
  10. }
  11. sort();

二、快速排序

  1. function quickSort(arr){
  2. if(arr.length<=1){
  3. return arr;
  4. }
  5. var pivotIndex = Math.floor(arr.length/2);//取基准点
  6. var pivot = arr.splice(pivotIndex,1)[0];//从数组中取出基准点所在的数
  7. var left = [];
  8. var right = [];
  9. for(var i=0;i<arr.length;i++){
  10. if(arr[i] < pivot){
  11. left.push(arr[i]);
  12. }else {
  13. right.push(arr[i]);
  14. }
  15. }
  16. return quickSort(left).concat(pivot,quickSort(right));//递归调用
  17. }

三、直接插入排序

  1. function insertionSort(arr){
  2. for (var i = 1; i < arr.length; i++) {//从第2个数开始排序
  3. for (var j = i; j > 0; j--) {//从后往前查找
  4. if (arr[j - 1] > arr[j]) {//如果前一个数大于后一个数,交换二者的值
  5. arr[j]=[arr[j-1],arr[j-1]=arr[j]][0];
  6. } else {
  7. break;
  8. }
  9. }
  10. }
  11. return arr;
  12. }

四、二分查找插入排序

  1. function binaryInsertionSort(array) {
  2. for (var i = 1; i < array.length; i++) {
  3. var key = array[i], left = 0, right = i - 1;
  4. while (left <= right) {
  5. var middle = parseInt((left + right) / 2);
  6. if (key < array[middle]) {
  7. right = middle - 1;
  8. } else {
  9. left = middle + 1;
  10. }
  11. }
  12. for (var j = i - 1; j >= left; j--) {
  13. array[j + 1] = array[j];
  14. }
  15. array[left] = key;
  16. }
  17. return array;
  18. }

五、选择排序

  1. function selectionSort(arr) {
  2. for (var i = 0,len=arr.length; i < len - 1; i++) {//n个数需要n-1次排序
  3. for (var j = i + 1; j < len; j++) {//从i之后的一个数开始遍历
  4. if (arr[j] < arr[i]) {//找到最小的那个数,然后与arr[i]交换值
  5. arr[i]=[arr[j],arr[j]=arr[i]][0];
  6. }
  7. }
  8. }
  9. return arr;
  10. }

参考链接:

http://www.cnblogs.com/beli/p/6297741.html

http://www.cnblogs.com/ywang1724/p/3946339.html

时间: 2024-10-17 16:20:00

[JS]算法总结的相关文章

js算法集合(一) 水仙花数 及拓展(自幂数的判断)

js算法集合(一) ★ 最近有些朋友跟我说对js中的一些算法感到很迷惑,知道这个算法到底是怎么回事,但是就是不会用代码把它写出来,这里我跟大家分享一下做水仙花数的算法的思路,并对其扩展到自幂数的算法,希望能对大家有所帮助. 1.验证一个数是否为水仙花数 ①要写水仙花数的算法,我们首先来了解一下什么是水仙花数,水仙花数是指一个 3位正整数 ,它的每个位上的数字的 3次幂之和等于它本身.(例如:1^3 + 5^3+ 3^3 = 153): ②了解了什么是水仙花数我们就开始分析该怎么下手.通过定义来看

js算法集合(二) javascript实现斐波那契数列 (兔子数列) Javascript实现杨辉三角

js算法集合(二)  斐波那契数列.杨辉三角 ★ 上一次我跟大家分享一下做水仙花数的算法的思路,并对其扩展到自幂数的算法,这次,我们来对斐波那契数列和杨辉三角进行研究,来加深对Javascript的理解. 一.Javascript实现斐波那契数列 ①要用Javascript实现斐波那契数列,我们首先要了解什么是斐波那契数列:斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为

js算法初窥03(简单搜索及去重算法)

前面我们了解了一些常用的排序算法,那么这篇文章我们来看看搜索算法的一些简单实现,我们先来介绍一个我们在实际工作中一定用到过的搜索算法--顺序搜索. 1.顺序搜索 其实顺序搜索十分简单,我们还是以第一篇文章写好的架子作为基础,在其中加入顺序搜索的方法: //顺序搜索 this.sequentialSearch = function(item) { for(var i = 0; i < array.length; i++) { if(item === array[i]) { return i; };

JS算法总结

1.选择排序: var arr = [3,6,7,2,6,4,1,6,8,24,12,53]; function sort(arr){ // 当数组的长度小于1的时候结束递归 if(arr.length==1){ return arr; } var min = arr[0],index = 0; for(var i=0;i<arr.length;i++){ // 计算最小值,如果数组当前值比之前的值还小那么min等于最小值. if(arr[i]<min){ min = arr[i]; // 保

json js 算法 面试

Git远程操作详解 - 阮一峰的网络日志http://www.ruanyifeng.com/blog/2014/06/git_remote.html 2.XHR_百度文库http://wenku.baidu.com/link?url=bxf_ou2tKCmrl4OW_zKrH8Oikgtrjn8nuvLE32wWR-v8B946Gl26C6QoaZKBXme869Do-h44DfzTBcvQxqTn_jtM0IXWFBXEQdHt4dYMIhq Java web过滤器验证登录(避免未经登录进入主

js算法:分治法-棋盘覆盖

在一个 2^k * 2^k 个方格组成的棋盘中,若恰有一个方格与其他方格不同.则称该方格为一特殊方格,称该棋盘为一特殊棋盘.显然特殊方格在棋盘上出现的位置有 4^k 种情形.因而对不论什么 k>=0 .有 4^k 种不同的特殊棋盘. 下图所看到的的特殊棋盘为 k=2 时 16 个特殊棋盘中的一个. 在棋盘覆盖问题中,要用下图中 4 中不同形态的 L 型骨牌覆盖一个给定的特殊棋牌上除特殊方格以外的全部方格,且不论什么 2 个 L 型骨牌不得重叠覆盖. 易知,在不论什么一个 2^k * 2^k 的棋

利用tween.js算法生成缓动效果

在讲tween类之前,不得不提的是贝塞尔曲线了.首先,贝塞尔曲线是指依据四个位置任意的点坐标绘制出的一条光滑曲线.它在作图工具或动画中中运用得比较多,例如PS中的钢笔工具,firework中的画笔等等.无论运用在哪里,它们的原理都是一样的.同样,在用js实现运动效果时,我们也可以利用贝塞尔曲线来实现不同的特效,而tween.js就是一个封装好的计算辅助算法.你可以通过连续输入多个值,然后利用贝塞尔曲线公式输出不同的值,最终形成了一条光滑的曲线.因为一条曲线上的值的不一样的,所以我们可以利用曲线的

js算法:动态规划-金矿模型与买书问题(附js源码)

本文内容介绍转自博客:通过金矿模型介绍动态规划,后面附上我自己实现的js代码: 经典的01背包问题是这样的: 有一个包和n个物品,包的容量为m,每个物品都有各自的体积和价值,问当从这n个物品中选择多个物品放在包里而物品体积总数不超过包的容量m时,能够得到的最大价值是多少?[对于每个物品不可以取多次,最多只能取一次,之所以叫做01背包,0表示不取,1表示取] 为了用一种生动又更形象的方式来讲解此题,我把此题用另一种方式来描述,如下: 有一个国家,所有的国民都非常老实憨厚,某天他们在自己的国家发现了

js算法初窥02(排序算法02-归并、快速以及堆排序)

上一篇,我们讲述了一些简单的排序算法,其实说到底,在前端的职业生涯中,不涉及node.不涉及后台的情况下,我目前还真的没想到有哪些地方可以用到这些数据结构和算法,但是我在前面的文章也说过了.或许你用不到,但是,真的,如果你想要在前端领域有一个不错的发展.数据结构和算法一定是你的必修课.它不仅仅让你在处理问题的时候可以有一个思维底蕴,更重要的是,在遇到一些奇葩产品的时候,你可以和他PK到底!嗯,到底! 哈哈,开个小玩笑.咱们还是聊点有营养的.上一篇的算法比较简单,主内容就是循环,次内容就是比较.但

关于js算法行列互换

HTML代码的话就是 <ul id="ul1"></ul> css body,ul,li{margin: 0;padding: 0;font-family: "黑体";background: #eee;} li{list-style: none;} #ul1{margin: 20px auto;border-top: 1px solid #666;border-left: 1px solid #666;overflow: hidden;tex