zoukankan      html  css  js  c++  java
  • 2.10排序算法

    排序算法篇
    1、数组去重
    1.1、indexOf()数组去重
    基本思想:indexOf→寻找第一次出现的位置,并存入参数
    缺点:遍历数组话费时间太多
    例:var arr = [1,2,1,3,1,4];
    var arr2 =[];
    for(var i=0;i<arr.length;i++){
    if(arr2.indexOf(arr[i]) == -1){
    arr2.push(arr[i]);
    }
    }
    1.2hash去重
    基本思想:将已出现的元素当做属性存入一个object内,下标引用要比indexOf()快的多
    缺点:占用内存多,以牺牲内存来换取时间
    var arr = [1,2,1,3,1,4];
    var result = [];
    var hash = {};
    for (var i = 0; arr[i] != undefined; i++) {
    if (!hash[arr[i]]) {
    result.push(arr[i]); //时间耽误在每一次重复元素的比较之中
    hash[arr[i]] = ‘ture’;
    }
    }
    1.3冒泡排序【Bubble Sort】(计算机排序的算法的基本思想)
    基本思想是:
    依次比较相邻的两个数,如果不符合排序规则,则调换两个数的位置。这样一遍比较下来,能够保证最大(或最小)的数排在最后一位
    再对最后一位以外的数组,重复前面的过程,直至全部排序完成
    function bubble(myarr){
    var len = myarr.length;
    for(var i = 0;i<len-1;i++) //需要几轮比较
    {
    for(var j=0;j<(len-1)–i;j++) //一轮比较中,需要比较的次数
    {
    if (myarr[j] > myarr[j+1]) //比较两个数组元素的大小,并将大的放在后面
    {
    var temp = myarr[j];
    myarr[j] = myarr[j+1];
    myarr[j+1] = temp;
    }
    }
    }
    console.log(myarr);
    return myarr;
    }
    补充:数组排序sort方法
    var newArr = arr.sort(
    //比较规则
    function(a,b){
    return b-a;
    // if(a>b){
    // return 1; 交换位置
    // }else(a<b){
    // return -1; 不做处理
    // }else{
    // return 0; 也不做处理
    // }
    }
    );

    1.4快速排序
    快速排序的思想很简单,整个排序过程只需要三步:
    (1)在数据集中,选择一个元素作为“基准”(pivot).
    (2)所有小于“基准”的元素,都移到“基准”的左边;所有大于“基准”的元素,都移到“基准”的右边;
    (3)对“基准”左边的和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止。
    思想;函数+递归
    代码例:
    var arr=[1,3,2,4,5,6,7,8,9];
    function quickSort(tempArr){
    if(tempArr.length<=1){
    //当数组中只剩下一个元素时,就不再分割了(可能剩下一个空元素)
    return tempArr;
    }
    //若传进来的数组不是只有一个元素
    //1.获取基准元素
    var index = Math.floor(arr.length/2);
    var item=arr.splice(index,1);
    //2.把小于基准的元素放在左边的数组,把大于基准的元素放在右边的数组
    var leftArr=[];
    var rightArr=[];
    for(var k=0;k<tempArr.length;k++){
    if(tempArr[k]<item){
    leftArr.push(tempArr[k]);
    }else{
    rightArr.push(tempArr[k]);
    }
    //3.把小于基准值的数组、基准值和大于基准值的数组拼接成一个完整的数组。并返回出去
    return quickSort(leftArr).concat(item,quickSort(rightArr));
    }
    quickSort(arr);
    }
    2.随机数(2.7内容)
    3.递归
    ☆递归最经典的例子【阶乘算法】:
    var func=function(x){
    if(x===1){ //递归三要素
    return 1;//①令递归结束的条件
    }else{
    return x*func(x-1);//②递归必须向结束的方向靠拢
    //③内部调用函数本身
    }
    };
    func(x);
    与其苟延残喘,不如从容燃烧!~
  • 相关阅读:
    每日vim插件--vim中的文本对象及相关插件
    《android传感器高级编程》译者序
    我在用的mac软件(3)-效率篇
    终端环境之tmux
    我在用的mac软件(2)-终端环境之zsh和z(*nix都适用)
    我在用的mac软件(1)--终端环境之iTerm2
    转:微服务架构的理论基础
    怎么使用阿里云直播服务应用到现在主流直播平台中
    WindowsServer2012显示计算机的方法
    在Windows Server 2012启用或关闭Internet Explorer增强的安全配置
  • 原文地址:https://www.cnblogs.com/ilaozhao/p/6605706.html
Copyright © 2011-2022 走看看