inserttionSort: порядковые номера свыше 2 ^ 32 - PullRequest
0 голосов
/ 04 октября 2018

Я реализую алгоритм 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,

И это странный вывод!Кто-то знает, где моя ошибка?Я просто хочу распечатать массив правильно!

1 Ответ

0 голосов
/ 04 октября 2018

Тип значения key для работы должен быть unsigned long long.

...