我正在设计一个算法来执行以下操作:给定数组A[1... n],对于每个i < j,找到所有的反转对A[i] > A[j].我正在使用合并排序并将数组A复制到数组B,然后比较两个数组,但我很难看到如何使用它来查找反转次数.任何提示或帮助将不胜感激.
我需要做这样的事情:假设我有一个数组:
[3, 4, 1, 2]
Run Code Online (Sandbox Code Playgroud)
我需要交换 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
Run Code Online (Sandbox Code Playgroud)
编辑:这是我尝试过的。并不总是有效...它来自这个问题:Bubble sort algorithm JavaScript
let counter = 0;
let swapped;
do …Run Code Online (Sandbox Code Playgroud)