0

C を使用してカウント ソート アルゴリズムを実装しようとしていますが、100 万個の整数のテスト中にセグメンテーション エラーが発生し続けます。何か助けてください。私のコードは次のとおりです(「type.h」は、unsigned int データ型の typedef「ユニット」を提供します):

#include <stdlib.h>
#include "csort.h"
#include <stdio.h>
#include "type.h"

unsigned int*
countingSort(unsigned int *A, int n) {
        uint i, j, l = 0, k = 0;
        uint *C;
        for (i = 0; i < n; i++)
            if (A[i] > k)
                    k = A[i];
        C = (uint*)malloc((sizeof(uint))*(k+1));
        for (i = 0; i <= k; i++)
            C[i] = 0;
        for (i = 0; i < n; i++)
            C[A[i]]++;
        for (i = 1; i < k; i++)
            for (j = 0; j < C[i]; j++)
                    A[l++] = i;
        free(C);
        return A;
}

私が扱っている入力は大きな数値なので、k は大きくなります。n は、入力配列内の整数の数 (100 万) です。

4

1 に答える 1

0

すべての整数の最大値は? 非常に大きい場合 (たとえば)、セグメンテーション違反をキャッチする2*10^9割り当ての問題が発生する可能性があります。2*10^9 * sizeof(int)

于 2013-03-22T09:02:09.907 に答える