目录
JavaScript_排序之冒泡排序
- 比较相邻的两个元素,如果前一个比后一个大,则交换位置
- 比较完第一轮的时候,最后一个元素是最大的元素
- 这时候最后一个元素是最大的,所以最后一个元素就不需要参与比较大小
function sort(arr) {
for (var i = 0; i < arr.length-1; i++) {
for (var j = 0; j < arr.length - 1 - i; j++) {
// 相邻元素两两对比,元素交换,大的元素交换到后面
if (arr[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));
}
};
递归三要素
- 一个问题的解可以分解为几个更小的同一题的解
- 分解后的子问题只存在数据不一样的问题。
- 存在递归终止条件
JavaScript_排序之快速排序
"快速排序"的思想很简单,整个排序过程只需要四步:
- 在数据集之中,选择一个元素作为"基准"(pivot)。
- 所有小于"基准"的元素,都移到"基准"的左边;所有大于"基准"的元素,都移到"基准"的右边。
- 对"基准"左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止
- 把所有的生成的新的数组元素合并在一起
举例来说,现在有一个数据集 {4,2,5,7,3,9,1}
怎么对其排序呢?
第一步,选择中间的元素7
作为"基准"。(基准值可以任意选择,但是选择中间的值比较容易理解。)
第二步,按照顺序,将每个元素与"基准"进行比较,形成两个子集,一个"小于7",另一个"大于等于7"
第三步,对两个子集不断重复第一步和第二步,直到所有子集只剩下一个元素为止
第四步,合并所有的元素
<script>
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);
</script>
Chrome浏览器插件下载
- 访问谷歌应用商店 chrome://apps JSONView
- 利用第三方网站下载安装:极简插件_Chrome扩展插件商店_优质crx应用
如果有问题就把解压文件拖到扩展程序