zoukankan      html  css  js  c++  java
  • JavaScript小练习2

    1--对一个整数进行若干次变换,直到这个数只剩下一位数字,变换规则:将这个数变成所有位数上的数字的乘积,输出变换的次数

    function GetResult(n){
        var count = 0;
        while(n>= 10){  //n大于等于10的遍历,即不满足变换规则停止的条件下应该做的事
            var m = n;  //保存n变量
            var s = 1;  //乘数设置
            var str  = m + "=";  //变换规则输出的定义
            while(m) {   //n存在的遍历
                s *= m % 10;  //求取最后一位上的数字,并进行乘积运算
                if(m <10){   //输出样式调整
                    str += m% 10;
                }else {
                    str += m % 10 + "*";
                }
                m = parseInt(m/10);  //将输入的数减少一位,即末尾数去掉
            }
            console.log(str);
            n = s;
            count++;
    
        }
        console.log(count);
        return n;
    }
    console.log(GetResult(3369))
    /*
    3369=9*6*3*3
    486=6*8*4
    192=2*9*1
    18=8*1
    4
    8
    */

    2--冒泡排序

    思想:比较相邻的两个元素,若前一个元素比后一个大,则交换位置;第一轮的时候最后一个元素应该是最大的一个;按照步骤1方法进行相邻两个元素的比较,这个时候最后一个元素已经是最大的了,不需要再进行比较。

    function bubblesort(arr){
        for(var i=0;i<arr.length-1;i++){
            for(var j=0;j<arr.length-i-1;j++){
               if(arr[j] > arr[j+1]){
                   var temp=arr[j];
                   arr[j]=arr[j+1];
                   arr[j+1]=temp;
               }
            }
        }
    }
    var arr=[1,3,4,6,2,9,5];
    console.log(arr);
    bubblesort(arr);
    console.log(arr);
    

    3-- 快排

    思想:选择一个基准数,这里以数组第一个元素为基准,对数组从第二个元素开始进行遍历,对于大于基准的元素push进right数组,对于小于基准的元素push进left数组。对left、right数组进行递归。将left、pivot、right相拼接。

    function quickSort(arr){
        if(arr.length<=1) {
          return arr;
        }
        var left=[];
        var right=[];
        var pivot=arr[0];
        for(var i=1;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 arr=[5,6,2,1,3,8,7,1.2,5.5,4.5];
    console.log(quickSort(arr));
    

    4--插入排序
    思想:

    (1) 从第一个元素开始,该元素可以认为已经被排序
    (2) 取出下一个元素,在已经排序的元素序列中从后向前扫描
    (3) 如果该元素(已排序)大于新元素,将该元素移到下一位置
    (4) 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
    (5)将新元素插入到下一位置中
    (6) 重复步骤2

    function insertSort(arr){
        if(arr.length <= 1){
            return arr
        }
        for(var i=1; i<arr.length; i++){
            var tmp = arr[i]      //把arr[i]保存起来,防止被覆盖
            var j = i-1           //定位排好序的最大元素
            while(tmp < arr[j] && j>=0){   //如果要插入的元素小于排好序的最大元素,将该最大元素向后移,j向前移,继续比较
                arr[j+1] = arr[j]
                j--
            }
            arr[j+1] = tmp                
        }
        return arr
    }
    
    var arr = [5,3,2,4,1,10]
    console.log(insertSort(arr))
    

    5--二分查找

    思想:二分法查找,也称折半查找,是一种在有序数组中查找特定元素的搜索算法。查找过程可以分为以下步骤:
    (1)首先,从有序数组的中间的元素开始搜索,如果该元素正好是目标元素(即要查找的元素),则搜索过程结束,否则进行下一步。
    (2)如果目标元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半区域查找,然后重复第一步的操作。
    (3)如果某一步数组为空,则表示找不到目标元素。

    递归:
    function binarySearch(arr,findVal,leftIndex,rightIndex){
        if(leftIndex>rightIndex){
            return ;
        }
        var midIndex=Math.floor((leftIndex+rightIndex)/2);
        var midVal=arr[midIndex];
        if(midVal>findVal){
            binarySearch(arr,findVal,leftIndex,midIndex-1);
        }else if(midVal<findVal){
            binarySearch(arr,findVal,midIndex+1,rightIndex);
        }else{
            console.log(“找到,下标为:”+midIndex);
            return
        }
    }
    
    
    非递归:
    function binarySearch(data, item){
        var h = data.length -1, l = 0;
        while(l <= h ){
            var m = Math.floor((h+l)/2);
            if(data[m]===item){  //找到
                return m;
            }else if(item > data[m]){  //如果要查找的数据大于中间值,则在右半边查找
                l = m + 1;
            }else{      //要查找的数据小于中间值,则在左半边查找
                h = m -1;
            }
        }
        return -1;
    }
    
    宝剑锋从磨砺出,梅花香自苦寒来。
  • 相关阅读:
    雷霆战机
    各种 Python 库/模块/工具
    redis
    25
    为什么Python中“2==2>1”结果为True
    thinkphp3.2路由美化,url简化
    thinkphp调整框架核心目录think的位置
    thinkphp3.2中开启静态缓存后对404页面的处理方法
    thinphp中volist嵌套循环时变量$i 被污染问题,key="k"
    thinkphp中如何是实现多表查询
  • 原文地址:https://www.cnblogs.com/haimengqingyuan/p/6880563.html
Copyright © 2011-2022 走看看