Подсчет сортировки в C ++ - PullRequest
       8

Подсчет сортировки в C ++

0 голосов
/ 24 января 2019

Я пытаюсь реализовать сортировку подсчетов в C ++ без создания функции.Это код, который я написал до сих пор, но программа не возвращает мне никаких значений.Это также не дает мне никаких ошибок.Поэтому что не так?

#include <iostream>

using namespace std;

int main()
{
    int A[100], B[100], C[100], i, j, k = 0, n;

    cin >> n;

    for (i = 0; i < n; ++i)
    {
        cin >> A[i];
    }

    for (i = 0; i < n; ++i)
    {
        if (A[i] > k)
        {
            k = A[i];
        }
    }

    for (i = 0; i < k + 1; ++i)
    {
        C[i] = 0;
    }

    for (j = 0; j < n; ++j)
    {
        C[A[j]]++;
    }

    for (i = 0; i < k; ++i)
    {
        C[i] += C[i - 1];
    }

    for (j = n; j > 0; --j)
    {
        B[C[A[j]]] = A[j];
        C[A[j]] -= 1;
    }

    for (i = 0; i < n; ++i)
    {
        cout << B[i] << " ";
    }

    return 0;
}

1 Ответ

0 голосов
/ 24 января 2019

Похоже, вы на правильном пути. Вы берете ввод в A, находите наибольшее значение, с которым будете иметь дело, а затем убедитесь, что вы обнулили столько значений в вашем массиве C. Но вот когда все начинает идти не так. Затем вы делаете:

for (i = 0; i < k; ++i)
{
    C[i] += C[i - 1];
}

for (j = n; j > 0; --j)
{
    B[C[A[j]]] = A[j];
    C[A[j]] -= 1;
}

Этот первый цикл всегда выходит за пределы на первой итерации (C[i-1], когда i=0 будет неопределенным поведением), но даже если это не так, я не уверен, что вы имеете в виду. Или в цикле после этого.

Вместо этого на вашем месте я бы создал переменную indx, чтобы отслеживать, к какому индексу я собираюсь вставить число (сколько чисел я уже добавил), а затем я Зацикливался бы на C, и для каждого значения в C я бы зацикливался столько раз и вставлял столько значений этого индекса. Мое объяснение может звучать немного многословно, но это будет выглядеть так:

int indx = 0;
for(int x = 0; x <= k; x++) {
    for(int y = 0; y < C[x]; y++) {
        B[indx++] = x;
    }
}

Если вы замените две вышеуказанные петли этой, тогда все должно работать как положено.

Смотрите живой пример здесь: ideone

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