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
才能工作。
我正在实施 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
才能工作。