数组排序(升序)

自己想的数组排序:只做记录不做参考

从第一次开始比较找出数组中最小数,取出来放入一个新数组并且在原始数组中删掉这个最小数,依次类推找到最后一个(性能不好)

    var arr = [45, 90, 32, 45, 33, 2, 90, 100, 36];
    var loop = arr.length;
    var target = [];
    for (var i = 0; i < loop; i++) {
      var min = arr[0], k = 0;
      for (var j = 1; j < arr.length; j++) {
        if (min > arr[j]) {
          min = arr[j]
          k = j;
        }
      }
      arr.splice(k, 1);
      target.push(min);
    }
    console.log(target)

网上推荐:

1,冒泡排序:比较相邻两个数大小,若第一个数比第二个数大,则交换位置,第一次循环能确定一个最大值,以此类推

    var arr = [45, 90, 32, 45, 33, 2, 90, 100, 36];
    for (let i = 1; i < arr.length; i++) {
      for (let j = 0; j < arr.length - i; j++) {
        if (arr[j] > arr[j + 1]) {
          let temp = arr[j];
          arr[j] = arr[j + 1];
          arr[j + 1] = temp
        }
      }
    }
    console.log(arr)

图片辅助:

图片已经损坏 :<

2,选择排序:假设数组第一个元素是最小值,对应索引是minIndex, 让该值与剩余值做比较,如果有小于该值则改变minIndex指向,让minIndex指向最小索引,用minIndex索引指向的值与剩余值作比较,第一轮比较完成后确定给一个最小的minIndex,让其值和第一个元素交换位置;假设数组第二个元素是最小值,以此类推

    var arr = [45, 90, 32, 45, 33, 2, 90, 100, 36];
    for (let i = 0;i < arr.length - 1; i++){
      var minIndex = i;
      for(let j = i + 1;j < arr.length; j++) {
        if (arr[minIndex] > arr[j]) {
          minIndex = j;
        }
      }
      let temp = arr[i];
      arr[i] = arr[minIndex];
      arr[minIndex] = temp;
    }
    console.log(arr)

图片辅助:

图片已经损坏 :<

<think>好的,我现在要帮助用户找到在JavaScript中对数值数组进行升序排序的方法和示例。用户明确提到需要数值的升序排序,所以我得先回忆一下JavaScript中数组排序的相关知识。 首先,我记得JavaScript的数组有一个sort()方法,但默认情况下它是按照字符串的Unicode码点来排序的。比如,数字10会被排在5前面,因为字符"10"中的"1"比"5"的码点小。这时候就需要提供一个比较函数来确保数值的正确排序。 用户提供的引用中有几个相关的例子。引用[2]中展示了直接使用sort()的问题,比如数值数组[5,10,0,15,1,20]会被错误地排序为[0,1,10,15,20,5],因为默认是按字符串比较。然后他们通过定义compare函数,返回value1和value2的差值来实现正确排序。例如: function compare(value1, value2) { if (value1 < value2) return -1; else if (value1 > value2) return 1; else return 0; } 然后使用values.sort(compare)得到正确的升序结果。不过更简洁的方式可能是直接返回value1 - value2,这样比较函数会更简短。比如引用[3]中的例子,使用箭头函数和差值来排序activeCount属性,虽然那个例子是降排列,但升序的话只需要调换a和b的位置,即a.acitveCount - b.acitveCount。不过对于数值数组来说,直接使用(a, b) => a - b即可。 另外,引用[4]中的第二种方法用了arr.sort(),但用户的数据是纯数值的,所以如果直接使用sort()可能会得到错误的结果,如引用[2]所示。因此必须强调比较函数的重要性。 接下来,我需要将这些信息整理成一个清晰的步骤。首先介绍默认sort的问题,然后给出正确的比较函数方法,包括两种写法:传统函数和箭头函数。同时,提供示例代码,并说明返回值的含义,比如正数、负数、零的影响。 另外,用户可能需要知道原地排序的特点,即原数组会被修改,这点也应该提到。示例部分可以结合引用中的代码,比如引用[2]和引用[3]中的例子,调整成升序的情况。 最后,对比冒泡排序和sort方法,但根据用户的问题,可能更关注sort方法,所以冒泡排序作为补充即可,如引用[4]中的第一种方法,但用户的问题可能不需要手动实现排序算法,所以可能不需要重点强调,不过可以作为扩展知识提及。 总结回答的结构应该是: 1. 指出默认sort的问题 2. 正确的比较函数写法(两种形式) 3. 示例代码 4. 注意事项(如原地排序) 5. 可能的相关问题 同时,成相关问题,比如如何降、处理对象数组、性能比较等,参考用户之前的引用内容,例如引用[1]和引用[3]涉及对象属性的排序,可以作为相关问题。 现在需要确保回答正确,不遗漏关键点,并且示例准确。比如,在示例中使用用户提供的数值数组,如var arr = [5,10,0,15,1,20];,然后应用比较函数,并展示结果的变化。 还要注意LaTeX格式的使用,例如在行内数学表达式的地方用$...$,但可能在这个问题中涉及较少。不过如果有数学相关的部分,如比较函数的返回值解释,可能需要使用公式,例如比较函数返回值大于0时,a排在b后面,可以用数学符号表示。 最后检查引用是否正确,用户提供的引用中有多个例子,需要在回答中适当引用,例如在提到默认排序问题时引用[2],在比较函数部分引用[2]和[3]等。</think>在JavaScript中对数值数组进行升序排序,需要特别注意`sort()`方法的默认排序规则。以下是具体实现方法和示例: ### 一、正确方法 1. **基础实现原理** `sort()`方法默认按字符串Unicode顺排序,直接使用会导致数值排序错误[^2]。需传入比较函数: ```javascript arr.sort((a, b) => a - b) ``` 2. **比较函数的作用** 函数返回值决定元素顺: - $a - b > 0$ → a排在b后面 - $a - b < 0$ → a排在b前面 - $a - b = 0$ → 顺不变 ### 二、代码示例 #### 场景1:纯数值数组 ```javascript let numbers = [5, 10, 0, 15, 1, 20]; numbers.sort((a, b) => a - b); console.log(numbers); // [0, 1, 5, 10, 15, 20] ``` #### 场景2:对象数组按数值属性排序 ```javascript const products = [ {name: '鼠标', price: 45}, {name: '键盘', price: 120}, {name: '耳机', price: 80} ]; products.sort((a, b) => a.price - b.price); // 按price升序排列[^3] ``` ### 三、注意事项 1. **原地排序特性** `sort()`方法直接修改原数组,若需保留原数组应先拷贝: ```javascript const sorted = [...numbers].sort((a,b) => a - b) ``` 2. **特殊值处理** 包含`NaN`的数组元素会被排到末尾,`undefined`元素不参与排序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值