【JavaScript】7-30 字符串的冒泡排序 (20分)

题目:

我们已经知道了将N个整数按从小到大排序的冒泡排序法。本题要求将此方法用于字符串序列,并对任意给定的K(<N),输出扫描完第K遍后的中间结果序列。

输入格式:

输入在第1行中给出N和K(1K<N100),此后N行,每行包含一个长度不超过10的、仅由小写英文字母组成的非空字符串。

输出格式:

输出冒泡排序法扫描完第K遍后的中间结果序列,每行包含一个字符串。 

输入样例:

6 2
best
cat
east
a
free
day

 

 

 

 

 

 

输出样例:

best
a
cat
day
east
free

 

 

 

 

 

思路:

参考整数冒泡排序法,不同的是输入行数要根据第一行的N,需要先读取到N值。

在JavaScript中字符串的大小可以直接用【>】或【<】进行比较,JS解释器会把字符串转换为ASCII码逐个字符依次比较。

JavaScript代码:

var readline = require('readline');

//创建一个readline接口实例
var readlineTest = readline.createInterface({    
    input: process.stdin,
    output: process.stdout    
});

var tempArray=[];    //创建数组来存储每一行的数据
var tempArrayIndex=0;//初始化数组的索引

readlineTest.on('line', function(line){
    
    //将每一行的内容添加至数组tempArray
    tempArray[tempArrayIndex]=line;
    tempArrayIndex++;
    
    var line1 = tempArray[0].split(' ')
    var N = parseInt(line1[0])
    var K = parseInt(line1[1])

    var strArr = []
    for (let i = 1; i <= N; i++) {
        strArr.push( tempArray[i] )
    }
    //当已输入的行数达到最大输入的行数时,结束readline.Interface实例
    if (tempArray.length == N + 1) {
        var ret = sort(N, K,strArr)        
        console.log(ret)
        readlineTest.close();
    }
    
});

//当readlineTest执行'close'命令时,输入流关闭,程序结束。
readlineTest.on('close', function() {    
    process.exit(0);    
});

function sort(N, K, strArr) {
    
    for (let i = 0; i < K; i++) {
        var max = strArr[0]
        for (let j = 1; j < N; j++) {
            if (max > strArr[j]) {
                strArr[j - 1] = strArr[j]
                strArr[j] = max
            } else {
                max = strArr[j]
            }
        }
    }

    var newarr = strArr.join('\n')

    return newarr
}

 

posted @ 2021-01-28 10:19  moonskies  阅读(171)  评论(0编辑  收藏  举报