Нахождение K наибольших чисел с использованием подсчета сортировки в несортированном массиве - PullRequest
0 голосов
/ 06 октября 2019

Я учусь правильно выполнять сортировку, выполняя небольшие онлайн-задания. Я написал код, но по какой-то причине он вызывает ошибку сегментации. Существует один вход для тестирования:
n = 6, k = 4
8 9 5 1 4 2
n = количество цен
k = количество цен, которые я хочу сделатьсумма
Таким образом, выход для этого случая будет 26 (потому что 9 + 8 + 5 + 4)
Но есть также один секретный тест, в котором я не вижу ввод, и когда я пытаюсь проверить его, он дает "ошибка сегментации ".

Я пытался использовать malloc, поэтому мне не нужно определять MAX_BUFFER, но это не помогло мне.

int *countings;
int *sorted;

max = price[0];

    for (i=1; i<n; i++) {                          
        if (max < price[i]) {
            max = price[i];
        }
    } 
countings = (int*)malloc(max * sizeof(int));
sorted = (int*)malloc(n * sizeof(int));

Это полный код

#include <stdio.h>
#include <stdlib.h>

#define MAX_BUFFER 100

long sum_of_k_biggest_numbers(int price[], int n, int k)
{
    int max; 
    int i;
    int countings[MAX_BUFFER];
    int sorted[MAX_BUFFER];
    int final_price = 0;

    max = price[0];

    for (i=1; i<n; i++) {                          
        if (max < price[i]) {
            max = price[i];
        }
    } 
    for (i=0; i<n; i++) {                          
        countings[price[i]]++;
    } 
    for (i=1; i<(max+1); i++) {
        countings[i] += countings[i - 1];
    } 
    for (i=(n-1); i>=0; i--) {                     
        sorted[--countings[price[i]]] = price[i]; 
    } 
    for (i=(n-1); i>=(n-k); i--) {                 
        final_price += sorted[i];
    }

    return final_price;
}

int main(void)
{
  int i, *x, n, k;

  scanf("%d %d", &n, &k);
  x = (int*)malloc(n * sizeof(int));
  for (i = 0; i < n; i++)
    scanf("%d", &x[i]);

  printf("%ld\n", sum_of_k_biggest_numbers(x, n, k));
  return 0;
}

Кто-нибудь может дать мне подсказку или сказать, в чем может быть проблема?

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