按身高排序

108 阅读2分钟

题目: 给你一个字符串数组 names ,和一个由 互不相同 的正整数组成的数组 heights 。两个数组的长度均为 n 。

对于每个下标 i,names[i] 和 heights[i] 表示第 i 个人的名字和身高。

请按身高 降序 顺序返回对应的名字数组 names 。

思路:第一想法绝对是sort,可是两个数组需要一一对应,如果sort就乱套了。

然后再仔细看一下题,降序输出数组,我想着不就是排序输出嘛,自己写一个排序,里面同时修改两个数组就可以啦,排序算法当然选择简单的冒泡排序,在降序的冒泡排序算法比较身高值,前一个身高小于后一个身高,就交换两者,同时交换姓名数组,具体代码如下:

var sortPeople = function(names, heights) {
    for(let i = 0;i < names.length;i++){
        for(let j = i; j < names.length -i -1;j++){
            if(heights[j] < heights[j+1]){
                let temp;
                temp = heights[j]
                heights[j] = heights[j+1]
                heights[j+1] = temp
                temp = names[j]
                names[j] = names[j+1]
                names[j+1] = temp
            }
        }
    }
    return names
};

测试完可供测试的案例后,都是对的,我就提交代码了,然后满心欢喜的等待执行通过的消息,但是报下面的错误了:

image-20230425163059917.png

我看完是一脸懵,怎么会这样呢,难道是数组长度太大了,可是也不大呀,难道是身高超出了范围,谁有17233厘米啊,可是又没有说单位,17233毫米也是有可能的,我更加迷茫了,然后我就开始怀疑,是不是我太久没有接触冒泡排序,代码写错了,那可是太丢脸了。

仔细检查后,发现降序的冒牌排序,一轮比较下来,最小的值排到数组的最后,那下一轮比较肯定又是从下标0开始,我怎么写错了嘞,正确写法:

var sortPeople = function(names, heights) {
    for(let i = 0;i < names.length - 1;i++){
        for(let j = 0; j < names.length-i-1;j++){
            if(heights[j] < heights[j+1]){
                1111
            }
        }
    }
    return names
};

执行结果图下图:

image-20230425164904295.png

结论:从今天开始以后都用JavaScript写题。为了我的毕设,这几天听完vue的课程。加油!