【发布时间】:2019-08-08 03:50:34
【问题描述】:
我需要做这样的事情:假设我有一个数组:
[3, 4, 1, 2]
我需要交换 3 和 4,以及 1 和 2,所以我的数组看起来像 [4, 3, 2, 1]。现在,我可以做sort()。在这里,我需要计算需要多少次迭代,才能将初始数组更改为最终输出。示例:
// I can sort one pair per iteration
let array = [3, 4, 1, 2, 5]
let counter = 0;
//swap 3 and 4
counter++;
// swap 1 and 2
counter++;
// 5 goes to first place
counter++
// now counter = 3 <-- what I need
编辑:这是我尝试过的。并不总是有效......它来自这个问题:Bubble sort algorithm JavaScript
let counter = 0;
let swapped;
do {
swapped = false;
for (var i = 0; i < array.length - 1; i++) {
if (array[i] < array[i + 1]) {
const temp = array[i];
array[i] = array[i + 1];
array[i + 1] = temp;
swapped = true;
counter++;
}
}
} while (swapped);
编辑:这并不总是正确的,因为例如,我可以将位置从最后一个交换到第一个。看上面的示例代码,现在已经编辑好了。
【问题讨论】:
-
为什么不试试呢?
-
您需要使用
.sort还是不使用.sort? -
这个问题可以澄清一下。有许多排序例程——当您说“我需要”时,这表明您正在寻找对数组进行排序所需的最少排序步骤。如果您不关心最小数量,
.sort的自定义比较器函数内的计数器将为您提供引擎的内置排序功能(通常是快速排序 + 插入排序),但您需要跟踪只有在比较导致交换的情况下。 -
@nemanja 其实是依赖于浏览器,原生代码中数组的排序方法是用什么算法实现的。
-
感谢更新,但还不是很清楚。听起来您要求对数组进行排序所需的绝对最小步骤数(冒泡排序不能保证这一点,但这是一个很好的尝试)。是这样吗?如果是这样,我会更新标题和正文以明确要求。
标签: javascript arrays