当我使用冒泡排序时,为啥我将数组中的最高值作为我的第一个元素?

Posted

技术标签:

【中文标题】当我使用冒泡排序时,为啥我将数组中的最高值作为我的第一个元素?【英文标题】:why do i get the highest valued number in my array as my first element when i use bubble sort?当我使用冒泡排序时,为什么我将数组中的最高值作为我的第一个元素? 【发布时间】:2019-12-12 03:14:41 【问题描述】:

我正在使用带有 javascript 和 jquarry 的冒泡排序对一些简单的数字进行排序。问题是具有最高值的数字将被排序为数组中的第一个元素。

输入一些需要排序的数字: 种类

<script>

    $(document).ready(function () 
        $("button").click(function () 

        var numbers = document.getElementById("numbers").value;
        var arr = numbers.split(",");
        var temp;

        arr.forEach(function(e) 
          arr.forEach(function (a, b) 

            if (arr[a] > arr[b]) 
              temp = arr[a];
              arr[a] = arr[b];
              arr[b] = temp;

            
          )
        )

        $("h1").text(arr.join());
      )
    )

</script>

我的输入是 2,4,3,1,我希望得到 1,2,3,4 作为我的输出。但最终结果是 4,1,2,3 。 没有错误提示

【问题讨论】:

你不能简单地使用 arr.sort() 吗? 欢迎来到 Stack Overflow!如果你能快速学会如何调试程序代码,它会有很大帮助。 yes arr.sort() 会使它变得更容易,并使代码更短,但我的任务是使用冒泡排序。 【参考方案1】:

让我先修复您的代码,但您可以只使用for() 循环来编写此排序代码。无论如何,您的错误是假设ab 都作为索引,但您在这里错了。 a 是数组中的元素,其中b 对应于arra 的索引。所以解决方法是:

var arr = [2, 4, 3, 1]

arr.forEach(function(e) 
    arr.forEach(function(a, i) 

        if (i + 1 <= arr.length && a > arr[i + 1]) 
            // You compare the current element a with the next element
            // at position i + 1 until i + 1 refers position outside the
            // arr bound.

            temp = a;
            arr[i] = arr[i + 1];
            arr[i + 1] = temp;

        
    )
)

console.log(arr)

如果您检查method definition,您将了解哪个参数代表什么:

arr.forEach(callback(currentValue [, index [, array]])[, thisArg]);

使用三个参数调用回调:

    元素的值 元素的索引 被遍历的 Array 对象

这里也不需要temp 变量,如果您了解temp 的含义,可以通过删除temp 将代码减少到下面。

arr[i] = arr[i + 1];
arr[i + 1] = a;

【讨论】:

哦。太感谢了。这个解释很容易理解。

以上是关于当我使用冒泡排序时,为啥我将数组中的最高值作为我的第一个元素?的主要内容,如果未能解决你的问题,请参考以下文章

为啥在我的情况下快速排序总是比冒泡排序慢?

为啥我的数组未显示为已过滤?

C-为啥Struct数组的冒泡排序会跳过Array中的第一个元素?

为啥冒泡排序需要嵌套循环?

Java - 数组中的冒泡排序对象

当我将 print_r() 应用于 PHP 中的数组时,为啥会得到“资源 id #4”? [复制]