当我使用冒泡排序时,为啥我将数组中的最高值作为我的第一个元素?
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()
循环来编写此排序代码。无论如何,您的错误是假设a
和b
都作为索引,但您在这里错了。 a
是数组中的元素,其中b
对应于arr
中a
的索引。所以解决方法是:
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;
【讨论】:
哦。太感谢了。这个解释很容易理解。以上是关于当我使用冒泡排序时,为啥我将数组中的最高值作为我的第一个元素?的主要内容,如果未能解决你的问题,请参考以下文章