C: сортировка значений в список c - PullRequest
0 голосов
/ 04 мая 2020

У меня есть задача вставить результаты экзамена в список c, отсортированный по возрастанию к минимуму.

Я инициализирую список с результатами экзамена и объявляю «пустое состояние» c список ". С помощью функции insertSortArray(...) я хочу вставить результат в список stati c.

Мне интересно, почему последовательность «noten» изменяется после второго printf «noten». Может ли это кто-нибудь объяснить мне? Это одна точка. Другое дело, что я борюсь с алгоритмом сортировки значений. Я знаю, что могу скопировать значения и затем запрограммировать пузырьковую сортировку, но есть ли способ отсортировать его из одного списка в другой?

#include <stdio.h>

void insertSortArray(float *array, float *list, int length)
{
    for (int i = 0; i < length; i++)
    {
        list[i] = array[i];
    }
}


int main()
{
    float noten[] = { 4.0,
                      1.3, 
                      1.0, 
                      5.0, 
                      2.3};

    float statList[] = { 0 };
    int length = sizeof(noten) / sizeof(float);

    for (int i = 0; i < length; i++)
    {
        printf("%f\n", noten[i]);
    }

    printf("\n%f\n", noten[1]);
    printf("\n");

    insertSortArray(noten, statList, length);

    printf("\n");
    for (int i = 0; i < length; i++)
    {
        printf("%f\t", noten[i]);
        printf("%f\n", statList[i]);
    }

    printf("\n%f\n", noten[1]);

    return 0;
}

1 Ответ

4 голосов
/ 04 мая 2020

float statList[] = { 0 }; объявляет массив только с одним элементом, который инициализируется нулем. То есть слишком мало , чтобы скопировать массив stati c в.

Использование:

float statList[5] = { 0 };

Это объявляет массив из 5 элементов, первый из которых явно инициализируется до нуля (а поскольку для инициализации всего массива предусмотрено недостаточно инициализаторов, все остальные элементы обнуляются).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...