2020京东秋招笔试编程姓名排序

8次阅读

共计 1550 个字符,预计需要花费 4 分钟才能阅读完成。

题目描述:

马上就要开学啦,教务处的老师拿到新生名单,现在他需要根据考生的姓名录入一个拼音版的新名单。老师录入的时候,需要输入姓和名(例如:ZHANG SAN 字母均为大写,姓名以空格隔开),并且要将这些人按一定规则排序。
排序的方式如下:
首先,按照该姓出现的次数排序,即:姓出现次数多的人先排序;
其次,若两个人的姓出现的次数一样多(或者是同一个姓),按照原名单的顺序。

输入

输入包括多行,每一行两个字符串,代表一个人的姓和名。

输出

输出排序后的名单。

样例输入

ZHANG SAN
LI SI
WANG WU
WANG LIU
WANG QI
ZHANG WU
LI WU

样例输出

WANG WU
WANG LIU
WANG QI
ZHANG SAN
LI SI
ZHANG WU
LI WU

代码部分

var array = ['ZHANG SAN', 'LI SI', 'WANG WU', 'WANG LIU', 'WANG QI', 'ZHANG WU', 'LI WU'];

function sort(array) {
  // 提取姓氏数组 xingArray
  var xingArray = [];
  for (var i = 0; i < array.length; i++) {var xingindex = array[i].indexOf(' ');
    xingArray.push(array[i].slice(0, xingindex));
  }

  // 得到删除姓氏数组中重复项的数组(简化姓氏数组 simpleArr)var simpleArr = [];
  for (var i = 0; i < xingArray.length; i++) {if (simpleArr.indexOf(xingArray[i]) == -1) {simpleArr.push(xingArray[i]);
    }
  }
  // console.log(simpleArr);

  // 统计姓名数组中各个姓氏出现的次数
  var countArray = [];
  for(var i = 0; i < simpleArr.length; i++) {
    var num = 0;
    for(var j = 0; j < array.length; j++) {if(simpleArr[i] == array[j].slice(0, array[j].indexOf(' '))) {num++;}
    }
    countArray.push(num);
  }
  // console.log(countArray);


  // 计算姓氏出现次数中的最大项
  var maxCount = 0;
  for (var i = 0; i < countArray.length; i++) {if (countArray[i] > maxCount) {maxCount = countArray[i];
    }
  }


  // 将出现同一次数的姓氏归并到一个数组,形成一个二维数组
  var sortXing = [];
  
  while(maxCount) {var xingteam = [];
    for(var i = 0; i < countArray.length; i++) {if(countArray[i] == maxCount) {xingteam.push(simpleArr[i]);
      }
    }
    sortXing.push(xingteam);
    maxCount--;
  }
  // console.log(sortXing);

  // 对姓名进行排序
  var sortName = [];
  for(var i= 0; i < sortXing.length; i++) {for(var j = 0; j < array.length; j++) {for(var k = 0; k < sortXing[i].length; k++) {if(sortXing[i][k] == array[j].slice(0, array[j].indexOf(' '))) {sortName.push(array[j]);
        }
      } 
    }
  }

  console.log(sortName);
}

sort(array);

正文完
 0