题目: 给你一个字符串数组 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
};
测试完可供测试的案例后,都是对的,我就提交代码了,然后满心欢喜的等待执行通过的消息,但是报下面的错误了:
我看完是一脸懵,怎么会这样呢,难道是数组长度太大了,可是也不大呀,难道是身高超出了范围,谁有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
};
执行结果图下图:
结论:从今天开始以后都用JavaScript写题。为了我的毕设,这几天听完vue的课程。加油!