JavaScript之不可亵玩系列-01 查找数组中最大最小值

【原创】码路工人 Coder-Power

大家好,这里是码路工人有力量,我是码路工人,你们是力量。

github-pages
博客园cnblogs


JavaScript之不可亵玩系列-01 查找数组中最大最小值

今日玩法:

  物料:整数数组一个,JavaScript语句若干

  把玩:找出数组中的最大值跟最小值


  • 玩法1:挨个盘查,找出目标

    • 玩法介绍:

      执行一遍循环,通过中间变量minmax,直接挑出最小最大值

    • 撸一把:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      // 定义整数数组
      var arr = [2, 5, 8, 1, 3, 7, 21, 6, 9, 12]

      // 查找最小最大值函数
      var findMinMax = function (arr) {
      if (!arr || !arr.length || toString.call(arr) !== '[object Array]') {
      return
      }

      var min, max, i
      var count = arr.length

      min = max = arr[0]

      if (count === 1) {

      // since "" null => will be recgonized as a Number

      if(toString.call(min) === 'object Number' && !isNaN(min)){
      return { min: min, max: max }
      }
      return undefined
      }
      // 以上 check 处理可以忽略,纯属闲得

      for (i = 1; i < count; i++) {
      var current = arr[i]
      if (toString.call(current) !== '[object Number]' || isNaN(current)) {
      continue
      }

      // 循环一遍,通过中间变量 min/max,挑出最小最大值
      if (current < min) {
      min = current
      } else if (current > max) {
      max = current
      }
      }

      return { min: min, max: max }
      }

      var ret = findMinMax(arr)

      console.log(ret) // {min: 1, max: 21}

  • 玩法2:排个序,冒个泡,谁大谁小难不倒

    • 玩法介绍:

      两个循环,一个让值小的靠左站,另一个让值大的靠右站,自觉排队效率高。

    • 撸一把:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      // 定义原始整数数组
      let numbers = [2, 5, 8, 1, 3, 7, 21, 6, 9, 12]

      // 排序函数
      function funcSortMinMax(arrNum) {
      let low = 0;
      let high = arrNum.length - 1

      // 找到最大值放右边
      // 期间每次比较会把相对大的往右移
      for (let i = low; i < high; i++) {
      if (arrNum[i] > arrNum[i + 1]) {
      [arrNum[i], arrNum[i + 1]] = [arrNum[i + 1], arrNum[i]]
      }
      }

      // 找到最小值放左边
      // 期间每次比较会把相对小的往左移
      for (let j = high; j > low; j--) {
      if (arrNum[j] < arrNum[j - 1]) {
      [arrNum[j - 1], arrNum[j]] = [arrNum[j], arrNum[j - 1]]
      }
      }
      }

      console.log('查找前:', numbers) // [2, 5, 8, 1, 3, 7, 21, 6, 9, 12]

      funcSortMinMax(numbers)

      console.log('查找后:', numbers) // [1, 2, 5, 3, 6, 7, 8, 9, 12, 21]

      console.log('最小值:', numbers[0]) // 1
      console.log('最大值:', numbers[numbers.length - 1]) // 21
      //

      可以看到,找出来最小值最大值了,它们分别排在了首末的位置。

      优秀的你一定想到了,稍微再整整,不就完成数组排序了吗?

    • 没撸够,再撸一把:

      上面的代码,已经能够查找出最小值跟最大值了,

      但是这么做有点牛刀的感觉了,再添把力,一个双向冒泡排序算法就出来了。

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      // 定义原始整数数组
      let numbers = [2, 5, 8, 1, 3, 7, 21, 6, 9, 12]

      // 排序函数
      function funcSort(arrNum) {
      let low = 0;
      let high = arrNum.length - 1

      while(low < high){
      // 找到最大值放右边
      // 期间每次比较会把相对大的往右移
      for (let i = low; i < high; i++) {
      if (arrNum[i] > arrNum[i + 1]) {
      [arrNum[i], arrNum[i + 1]] = [arrNum[i + 1], arrNum[i]]
      }
      }
      // 未排完元素中最大已找出,不再作为比较对象
      high--

      // 找到最小值放左边
      // 期间每次比较会把相对小的往左移
      for (let j = high; j > low; j--) {
      if (arrNum[j] < arrNum[j - 1]) {
      [arrNum[j - 1], arrNum[j]] = [arrNum[j], arrNum[j - 1]]
      }
      }
      // 未排完元素中最小已找出,不再作为比较对象
      low++
      }
      }

      console.log('排序前数组:', numbers) // [2, 5, 8, 1, 3, 7, 21, 6, 9, 12]

      funcSort(numbers)

      console.log('排序后数组:', numbers) // [1, 2, 3, 5, 6, 7, 8, 9, 12, 21]

      console.log('最小值:', numbers[0]) // 1
      console.log('最大值:', numbers[numbers.length - 1]) // 21
      //

      收工。


–END–


公众号(码路工人有力量)

欢迎关注分享,一起学习提高吧。
QRCode/微信订阅号二维码
CoderPowerQRCode