Javascript 我想让这个冒泡排序函数工作,但它给了我最大的调用堆栈大小超出 函数bubbleSort(arr){ var temp=arr.slice(0) 对于(变量i=0;i

Javascript 我想让这个冒泡排序函数工作,但它给了我最大的调用堆栈大小超出 函数bubbleSort(arr){ var temp=arr.slice(0) 对于(变量i=0;i,javascript,Javascript,我不是在看算法,因为我认为你是对的。问题在于数组之间的比较。尝试使用此功能 function bubbleSort(arr) { var temp = arr.slice(0) for (var i = 0; i < arr.length; i ++) { if (arr[i + 1] < arr[i]) { var temp_1 = arr[i+1] var temp_2 = arr[i]

我不是在看算法,因为我认为你是对的。问题在于数组之间的比较。尝试使用此功能

function bubbleSort(arr) {
    var temp = arr.slice(0)
    for (var i = 0; i < arr.length; i ++) {
        if (arr[i + 1] < arr[i]) {
            var temp_1 = arr[i+1]
            var temp_2 = arr[i]
            arr[i] = temp_1
            arr[i+1] = temp_2
        }
    }
    if (temp != arr) {
        return bubbleSort(arr)
    }
    return arr
}

console.log(bubbleSort([2,1,5,4,10,7,6,9,3,8]))
这里发生的是那个临时工数组总是返回true,您可以通过添加

JSON.stringify(temp) !== JSON.stringify(array);
在比较之前

解释:JSON#stringify比较从数组中获得的两个字符串。实现比较的另一种方法是逐个比较所有项目的长度和相等性。如果您使用“!=”操作符,您总是只能得到“true”,因为这两个数组是对象的两个不同实例

完整代码

 console.log(temp !== array)
函数bubbleSort(arr){
var temp=阵列切片(0);
对于(变量i=0;i
我不是在看算法,因为我认为你是对的。问题在于数组之间的比较。尝试使用此功能

function bubbleSort(arr) {
    var temp = arr.slice(0)
    for (var i = 0; i < arr.length; i ++) {
        if (arr[i + 1] < arr[i]) {
            var temp_1 = arr[i+1]
            var temp_2 = arr[i]
            arr[i] = temp_1
            arr[i+1] = temp_2
        }
    }
    if (temp != arr) {
        return bubbleSort(arr)
    }
    return arr
}

console.log(bubbleSort([2,1,5,4,10,7,6,9,3,8]))
这里发生的是那个临时工数组总是返回true,您可以通过添加

JSON.stringify(temp) !== JSON.stringify(array);
在比较之前

解释:JSON#stringify比较从数组中获得的两个字符串。实现比较的另一种方法是逐个比较所有项目的长度和相等性。如果您使用“!=”操作符,您总是只能得到“true”,因为这两个数组是对象的两个不同实例

完整代码

 console.log(temp !== array)
函数bubbleSort(arr){
var temp=阵列切片(0);
对于(变量i=0;i
  • 运算符
    ==
    =正在比较引用,所以它们总是将两个数组视为不同的(除非您比较同一实例)。检查
    ['a']=['a']
    :它将是
    。 您可以使用标志指示发生了更改:
  • 函数bubbleSort(arr){
    var temp=arr.slice(0)
    变量更改=错误
    对于(变量i=0;i
  • 一旦不知道输入数组的长度以及它和排序状态的接近程度,在某些情况下仍然可能会遇到相同的问题,所以最好用循环替换递归:
  • 函数bubbleSort(arr){
    变量更改=错误
    做{
    var temp=arr.slice(0)
    更改=错误
    对于(变量i=0;i
  • 运算符
    ==
    =正在比较引用,所以它们总是将两个数组视为不同的(除非您比较同一实例)。检查
    ['a']=['a']
    :它将是
    。 您可以使用标志指示发生了更改:
  • 函数bubbleSort(arr){
    var temp=arr.slice(0)
    变量更改=错误
    对于(变量i=0;i
  • 一旦不知道输入数组的长度以及它和排序状态的接近程度,在某些情况下仍然可能会遇到相同的问题,所以最好用循环替换递归:
  • 函数bubbleSort(arr){
    变量更改=错误
    做{
    var temp=arr.slice(0)
    更改=错误
    对于(变量i=0;i
    两个不同的数组将始终是
    =相互关联。两个不同的数组总是
    =互相问候。非常感谢!我不知道比较这两个数组(它们包含相同的元素并且具有相同的长度)会始终返回false!我很感激!非常感谢你!我不知道比较这两个数组(它们包含相同的元素并且具有相同的长度)会始终返回false!我很感激!非常感谢您详细阐述了比较,并建议我采取不同的方式!我将致力于在while循环中使用flag!非常感谢您详细阐述了比较,并建议我采取不同的方式!我将致力于在while循环中使用flag!