矩阵求逆

时间:2018-08-21 16:46:32

标签: c mergesort

#include <stdio.h>
#include<stdlib.h>

static void merge(int *array, int start, int mid, int end, int *count){
    int *leftarray = (int *)calloc(sizeof(int), mid-start+2);
    int *rightarray = (int *)calloc(sizeof(int), end-mid+2);
    int i,j = 0,k=0;
    for (i = start; i <= mid; i++){
        leftarray[j++] = array[i];
    }
    leftarray[j] = 2147483647;
    j = 0;
    for (i = mid + 1; i <= end; i++){
        rightarray[j++] = array[i];
    }
        rightarray[j] = 2147483647;
        j = 0;
        for (i = start; i <= end; i++){
            if (leftarray[j] <= rightarray[k]){
                array[i] = leftarray[j];
                j++;
            }
            else {
                array[i] = rightarray[k];
                k++;
                if (i != end){
                    *count += mid + 1 - start - j;
                }
            }

        }
}

static void display(int *array, int size){
    for (int i = 0; i<size; i++){
        printf("%d ", array[i]);
    }
    printf("\n");
}

static void mergeSort(int *array, int start, int end, int *count){
    if (start >= end){
        return;
    }
    int mid = (start + end) / 2;
    mergeSort(array, start, mid, count);
    mergeSort(array, mid + 1, end, count);
    merge(array, start, mid, end, count);
}
int mergesort() {
int n;
long long int count = 0;
//scanf("%d", &n);
int * array = (int *)calloc(sizeof(int), 100005);
int number = 199999;
for (int i = 0; i < 100000; i++){
    array[i] = number--;
}
/*for (int i=0; i<n; i++){
    scanf("%d", &array[i]);
}*/
mergeSort(array, 0, 100000 - 1, &count);
/*display(array, n);*/
printf("%d\n", count);
return 0;
}

int main(){
    mergesort();
    return 0;
}

我正在尝试从geeksforgeeks(https://www.geeksforgeeks.org/counting-inversions/)解决此问题,并实现了以下代码,但对于上述输入值,它给出了错误的结果,即从199999到100000的反向排序数组,而不是得到4999950000的结果,我得到其他一些我尝试调试的结果,但是没有用,谁能告诉我我哪里出错了

2 个答案:

答案 0 :(得分:3)

您将计数声明为long long int count = 0;,然后将其传递给&count,就好像它只是一个int *。尝试修复通过&count传递long long int *的功能。

我认为您得到的结果是704982704

答案 1 :(得分:0)

我认为您应该使用long int,因为您使用的值大于int的大小。