insertionSort:序号超过 2^32

insertionSort: order numbers over 2^32

我正在实施 InsertionSort 算法,但我必须 运行 在数字大于 2^32 的特定数据集上执行它。为简单起见,我创建了一些示例来测试程序。

#include <stdio.h> 

void insertionSort(unsigned long long a[]) {
    int i, j;
    int key;

    for(i = 1; i < 4; i++) {
        key = a[i];
        j = i-1;

        while(j >= 0 && a[j] > key) {
            a[j+1] = a[j]; 
            j = j-1; 
        }
        a[j+1] = key;
    }
}

int main() {
    // example array
    unsigned long long c [] = {40000000000LL, 10000000000LL, 20000000000LL, 30000000000LL};

    printf("Before insertionSort: \n");
    for(int i = 0; i < 4; i++) { printf("%llu,\n", c[i]); }

    printf("\n");

    insertionSort(c);

    printf("After insertionSort: \n");
    for(int i = 0; i < 4; i++) { printf("%llu,\n", c[i]); }
    printf("\n");

    return 0;
}

我终端上的输出如下所示:

Before insertionSort:
40000000000,
10000000000,
20000000000,
30000000000,

After insertionSort:
1410065408,
40000000000,
18446744072234715136,
18446744073644780544,

这是一个奇怪的输出!有人知道我的错误在哪里吗?我只想以正确的方式打印数组!

key值的类型必须unsigned long long才能工作。