基本上我正在尝试用Java编写一个算法来确定数组中乱序的对数。因此,如果我们取 i 和 j 并且 j 在数组中的位置比 i 高,但 A[i] > A[j] 则它将这两个数字计为反转。目前这就是我所拥有的:
for(int i = 0; i<n-1; i++){
if (A[i] > A[i+1]){
k++;
这样做只是比较彼此相邻的对,所以现在我正在尝试修改它以找到数组中较低位置的值高于较高位置的数字的任意两个数字。我知道如何做这样的事情,但我希望运行时间为 (n+k),其中 n 是数组的长度,k 是数组中的反转数。
编辑:这是我实现插入排序的尝试:
int k = 0;
int [] A = {5, 4, 3, 2, 1};
int n = A.length;
for(int i = 1; i < n; i++){
int temp = A[i];
int j;
for (j = i - 1; j >=0 && temp < A[j]; j--){
A[j + 1] = A[j];
A[j + 1] = A[j];
k++;
k 应该跟踪多少反转。对于数组 5、4、3、2、1,我返回的数字是 6。对吗?