> 文档中心 > 算法与数据

算法与数据

目录

JavaScript_排序之冒泡排序

JavaScript_算法之递归

什么是递归呢?

递归三要素

 JavaScript_排序之快速排序

Chrome浏览器插件下载


JavaScript_排序之冒泡排序

  1. 比较相邻的两个元素,如果前一个比后一个大,则交换位置
  2. 比较完第一轮的时候,最后一个元素是最大的元素
  3. 这时候最后一个元素是最大的,所以最后一个元素就不需要参与比较大小

 

 

 

 

function sort(arr) {    for (var i = 0; i < arr.length-1; i++) { for (var j = 0; j  arr[j + 1]) {   var temp = arr[j];  arr[j] = arr[j+1];  arr[j+1] = temp;     }     console.log("循环次数"+j+":"+arr); } console.log("第"+i+"轮结束");    }    return arr;}

JavaScript_算法之递归

什么是递归呢?

从前有座山,山里有个庙,庙里有个老和尚在给小和尚讲故事,讲的是从前有座山,山里有个庙,庙里有个老和尚在给小和尚讲故事,讲的是从前有座山。。。

 

 

这就是一个典型的递归,在不考虑岁数等自身的条件下,这将是个死递归,没有终止条件。

递归本质上是将原来的问题,转化为更小的同一问题,大白话就是 一个函数不断的调用自己。

function sum (num) {    if (num <= 1) { return 1;    } else { return (num * sum(num-1));    }};

递归三要素

  1. 一个问题的解可以分解为几个更小的同一题的解
  2. 分解后的子问题只存在数据不一样的问题。
  3. 存在递归终止条件

 JavaScript_排序之快速排序

"快速排序"的思想很简单,整个排序过程只需要四步:

  1. 在数据集之中,选择一个元素作为"基准"(pivot)。
  2. 所有小于"基准"的元素,都移到"基准"的左边;所有大于"基准"的元素,都移到"基准"的右边。
  3. 对"基准"左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止
  4. 把所有的生成的新的数组元素合并在一起

举例来说,现在有一个数据集 {4,2,5,7,3,9,1}怎么对其排序呢?

第一步,选择中间的元素7作为"基准"。(基准值可以任意选择,但是选择中间的值比较容易理解。)

 

 第二步,按照顺序,将每个元素与"基准"进行比较,形成两个子集,一个"小于7",另一个"大于等于7"

 第三步,对两个子集不断重复第一步和第二步,直到所有子集只剩下一个元素为止

 第四步,合并所有的元素

 

 var  arr = [4,2,5,7,3,9,1]; function quickSort(arr){     if(arr.length <=1 ){  return arr;     }     // 1. 在数组中选择中间的元素作为基准(获取下标)     var pivotIndex = Math.floor(arr.length / 2);     // 2. 取出具体的值     var pivot = arr.splice(pivotIndex,1)[0];//第一次是7     // 3. 创建左右的子集:数组格式     var left = [];     var right = [];     for(var i = 0;i<arr.length;i++){  if(arr[i] < pivot){      left.push(arr[i])  }else{      right.push(arr[i])  }     }     return quickSort(left).concat([pivot],quickSort(right)); } var result = quickSort(arr); console.log(result);    

Chrome浏览器插件下载

  1. 访问谷歌应用商店 chrome://apps     JSONView
  2. 利用第三方网站下载安装:极简插件_Chrome扩展插件商店_优质crx应用

 如果有问题就把解压文件拖到扩展程序

 

推荐搜索引擎:必应(bing.com)质量高