我正在尝试对下面给定的数组进行排序,而不将字符串转换为数字(没有atoi函数),也没有使用sort()内置函数
inputArr = [“ 1”,“ 2”,“ 10”,“ 3”,“ 21”,“ 15”]
let len = inputArr.length;
for (let i = 0; i < len; i++) {
for (let j = 0; j < len; j++) {
if (inputArr[j] > inputArr[j + 1]) {
let tmp = inputArr[j];
inputArr[j] = inputArr[j + 1];
inputArr[j + 1] = tmp;
}
}
}
return inputArr;
但是上面的代码没有按正确的顺序对数字进行排序
预期输出:[“ 1”,“ 2”,“ 3” ,,“ 10”,“ 15”,“ 21”]
您似乎通过使用BubbleSort来解决问题,因此尝试使用相同的算法提出解决方案。
该问题是与你的比较。
你会看到
"1" < "10" === true
但
"2" < "10" === false
因此,您需要检查字符串的每个字符以确定该数字实际上是否较小。这是代码:
const arr = ["1", "2", "10", "3", "21", "15"];
const len = arr.length;
const isGreater = (num1, num2) => {
if (num1.length < num2.length) return false;
for (let i = 0; i < len; ++i) {
if(num1[i] === num2[i]) continue;
return (num1[i] > num2[i]);
}
return false;
}
for (let i = 0; i < len; ++i) {
for (let j = 0; j < len - i - 1; ++j) {
if (arr[j].length > arr[j + 1].length || isGreater(arr[j], arr[j + 1])) {
let tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
console.log(arr);
函数isGreater将为您进行检查。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句