如何在JavaScript中不使用内置的Sort()和atoi方法对字符串数据类型的数字数组进行排序

如何在JavaScript中不使用内置的Sort()和atoi方法对字符串数据类型的数字数组进行排序,javascript,arrays,sorting,Javascript,Arrays,Sorting,我正在尝试对下面给定的数组进行排序,但没有将字符串转换为数字(没有atoi函数),也没有使用sort()内置函数 inputArr=[“1”、“2”、“10”、“3”、“21”、“15”] 让len=inputArr.length; for(设i=0;iNumber(a)-Number(b)) 控制台日志(已排序)常数a=[“1”、“2”、“3”、“10”、“15”、“21”]; a、 排序((x,y)=>x-y); 您似乎通过使用BubbleSort来解决问题,因此尝试使用相同的算法来提出解决

我正在尝试对下面给定的数组进行排序,但没有将字符串转换为数字(没有atoi函数),也没有使用sort()内置函数

inputArr=[“1”、“2”、“10”、“3”、“21”、“15”]

让len=inputArr.length;
for(设i=0;iinputArr[j+1]){
设tmp=inputArr[j];
inputArr[j]=inputArr[j+1];
inputArr[j+1]=tmp;
}
}
}
返回输入端;
但是上面的代码没有按照正确的顺序对数字进行排序

预期输出:[“1”、“2”、“3”、“10”、“15”、“21”]

inputArr=[“1”、“2”、“10”、“3”、“21”、“15”]
常量排序=输入排序((a,b)=>Number(a)-Number(b))
控制台日志(已排序)
常数a=[“1”、“2”、“3”、“10”、“15”、“21”];
a、 排序((x,y)=>x-y);

您似乎通过使用BubbleSort来解决问题,因此尝试使用相同的算法来提出解决方案

问题在于您的比较

你会看到的

"1" < "10" === true
“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);
const arr=[“1”、“2”、“10”、“3”、“21”、“15”];
常数长度=阵列长度;
常数大于等于(num1,num2)=>{
if(num1.lengthnum2[i]);
}
返回false;
}
for(设i=0;iarr[j+1].length | |大于(arr[j],arr[j+1])){
设tmp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=tmp;
}
}
}
控制台日志(arr);

函数isGreater将为您执行该检查。

是的,当我们使用sort()方法时,它将按顺序排序。但是我如何在不使用内置函数的情况下对其进行排序,也不将string元素转换为integerIt,而不是转换它。它只是转换用于比较的值。结果仍然是字符串。为什么要实现自己的排序功能?这是作业吗?这不是作业。我正在寻找解决方案,而不使用js中的任何内置方法。我想用任何排序算法进行排序。SSO,这更多的是一个算法问题,而不是JS问题。来自@adiutor robattus的答案看起来很有希望。
"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);