javascript - 如何在不使用 JavaScript 中的内置 sort() 和 atoi 方法的情况下对字符串数据类型的数组进行排序
问题描述
我正在尝试对下面给定的数组进行排序,而不将字符串转换为数字(没有 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 将为您进行检查。
推荐阅读
- css - 使用基础的垂直居中菜单
- python - 将列名作为参数传递的 Pandas applymap 方法
- c# - 如何从动态创建的文本框中保存文本
- java - 我们可以使用 selenium Webdriver 访问 ICICI、HDFC、SBI 等银行网站的 Web 元素以实现自动化吗?
- arrays - Scala 数组的大小(按字节)
- java - 如何使用 Map 方法向 HIbernate 5 提供实体包?
- javascript - 这个方法在 React.js 中执行什么?
- angular - 如何共享所有应用程序共有的 Angular 6 中的所有核心文件和文件夹?
- c# - 执行顺序/逻辑是什么:Task.Run(async() => await someAsyncMethod();)
- angular - Angular 6 X-editable with ngx-datatable