算法与数据

目录

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.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));
    }
};

递归三要素

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

 JavaScript_排序之快速排序

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

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

举例来说,现在有一个数据集 {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浏览器插件下载

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

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

 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值