美文网首页
Web34.拓展任务

Web34.拓展任务

作者: FiredEarthMusic | 来源:发表于2018-01-20 18:50 被阅读16次

简单的排序算法

主要研究N个正整数排序
算法的简单归纳:1.输入: 一个算法必须有零个或以上输入量
                             2.输出 :一个算法应该有一个或以上输出量
                             3.明确性:  算法的描述必须无歧义
                             4.有限性 : 必须在有限个步骤内结束
                             5.有效性:又称可行性,能够被执行者实现

定义问题

数组array 含有N个正整数
输入量为array
请将array中的数字从小到大排列
输出量为排好序的数组

例如 
var array = [5,2,4,6,8]
function sort(){
    你的代码
}
sort(array) === [2,4,5,6,8]

不会做

遇到思维障碍怎么办
1.将抽象的问题转化为具体的问题
2.将没见过的问题转化为见过的问题

1.冒泡排序(教官双手算法:较高的往后站)

通过一轮遍历,最高的一定到右边去了

function sort(array){
    var i,j         
    for(i=0; i<array.length; i++){  //第i次
        for(j=0; j<array.length-1-i; j++){   //每一次的起点
           //console.log(array[j]+','+array[j+1]) 
           if(array[j]<=array[j+1]){
           
            }else{
                swap(array, j, j+1)
                //console.log('swap:'+array[j]+','+array[j+1])
            }  
        }
    }
    return array;
}

function swap(array, a,b){
    var temp = array[a]
    array[a] = array[b]
    array[b] = temp
}

console.log(sort[3,5,2,4,1])
console.log(sort[1,2,1,2,1])
console.log(sort[1])
console.log(sort[])

2.选择排序(教官一指 最矮的到前面来)

function sort(array){
    var i
    var j
    var indexOfMin
    for(i=0; i<array.length; i++){
        indexOfMin = i
        for(j=i+1; j<array.length; j++){
            if(array[j] < array[indexOfMin]){
                swap(array, j, indexOfMin)
            }
        }
        if(indexOfMin !== i){
           swap(array, i, indexOfMin)     
        }
    }
    return array;
}



function swap(){
    var temp = array[a]
    array[a] = array[b]
    array[b] = temp
}
console.log(sort([3,5,2,4,1]))
console.log(sort([1,2,1,2,1]))
console.log(sort([1]))
console.log(sort([]))

3.插入排序(起牌算法)

打个比方就类比水浒传一百单八将的排名吧,每个好汉来了不知道自己排老几,怎么办,那就和已经排过级别的人比较,然后找到其对应的位置,单八将宋万、杜迁先上的梁山,先默认杜迁第一来的也是单八将最厉害的,然后宋万来了,一比较宋万厉害,那宋万排第一,杜迁排第二,接下来朱贵来了,朱贵没他们两个厉害,那就排第三,再后来林冲来了,林冲比他们三个都厉害,那林冲排第一,宋万第二,杜迁第三,朱贵第四,依次类推。梁山排名其实就是典型的插入排序。

function insertSort(arr){
    for(var i=1; i<arr.length; i++){
        var key = arr[i]
        var j = i -1
        while( arr[j] > key){
            arr[j + 1] = arr[j]
            j--
        }
        arr[j + 1] = key
    }
    return array;
}
var arr=[3,44,38,5,47,15,36,26,27,2,46,4,19,50,48];
console.log(insertSort(arr));


4.归并排序(领导算法)

function mergeSort(arr) { //采用自上而下的递归方法
  var len = arr.length;
  if(len < 2) {
    return arr;
  }
  var middle = Math.floor(len / 2),
  left = arr.slice(0, middle),
  right = arr.slice(middle);
  return merge(mergeSort(left), mergeSort(right));
}
 
function merge(left, right){
  var result = [];
  //console.time('归并排序耗时');
  while (left.length && right.length) {
    if (left[0] <= right[0]) {
      result.push(left.shift());
    } else {
      result.push(right.shift());
    }
  }
 
  while (left.length){
    result.push(left.shift());
  }
  while (right.length){
    result.push(right.shift());
  }
  //console.timeEnd('归并排序耗时');
  return result;
}
var arr=[3,44,38,5,47,15,36,26,27,2,46,4,19,50,48];
console.log(mergeSort(arr));

5.快速排序(自私算法:我前面的都比我矮 我后面的都比我高)

function quickSort(array, left, right) {
  console.time('1.快速排序耗时');
  if (left < right) {
    var x = array[right], i = left - 1, temp;
    for (var j = left; j <= right; j++) {
      if (array[j] <= x) {
        i++;
        temp = array[i];
        array[i] = array[j];
        array[j] = temp;
      }
    }
    console.log(array) ;
    console.log(left,i) ;
    quickSort(array, left, i - 1);
    console.log(array)
    console.log(i,right)
    quickSort(array, i + 1, right);
  }
  console.timeEnd('1.快速排序耗时');
  console.log(array)
  return array;
}
var arr=[3,44,38,5,47,15,36,26,27,2,46,4,19,50,48];
console.log(quickSort(arr,0,arr.length-1));//[2, 3, 4, 5, 15, 19, 26, 27, 36, 38, 44, 46, 47, 48, 50];

相关文章

  • Web34.拓展任务

    简单的排序算法 定义问题 不会做 1.冒泡排序(教官双手算法:较高的往后站) 2.选择排序(教官一指 最矮的到前面...

  • 拓展学习任务群

    拓展型学习任务群主要聚焦整本书阅读和跨学科学习两大方面。 首先,整本书阅读。整本书阅读旨在引导学生体会、评析人格魅...

  • 165-培训第二天

    这是李婷365日写作计划第165天的写作内容 今天我们玩了两个团队拓展运动。上午的拓展是团队同时去挑战几项任务,通...

  • Java 多线程基础

    多线程程序在较低的层次上拓展了多任务的概念:一个程序同时执行多个任务.通常,每个任务被称为一个线程,它是线程...

  • 前端工程师常用插件/库

    Nodejs 插件 : 跑定时任务:node-schedule拓展:cron 表达式规则:http://www.b...

  • 多文本阅读的一点思考

    2022版《义务教育语文课程标准》指出:阅读作为发展型学习任务群的核心和拓展型任务群的基础。在发展型学习任务群中,...

  • 护理理论-3

    任务三 预习与拓展学习 一、预习 1.成长与发展理论2.自理模式二、拓展学习 1.拉扎勒斯的压力与应对模式 2.皮...

  • 新课标啃读7

    拓展型学习任务群 概念解读 学习任务群,第一个词“学习”,意味着由教到学的方式转变;第二个词“任务”, 表明了情境...

  • 绪论-5

    任务五 拓展学习 1.文本: 《护士条例》(2008-5-12) 2.视频: 移动护理信息系统

  • 任务型阅读单元设计解读——举办演讲比赛

    任务三:举办演讲比赛 这个任务侧重在综合实践活动,引导学生从课内拓展开,举报演讲比赛。课堂延伸到课外,将隐形的语文...

网友评论

      本文标题:Web34.拓展任务

      本文链接:https://www.haomeiwen.com/subject/chzopxtx.html