0

そのため、私は C コード、特に配列、配列のサイズ、および返される最大要素数の 3 つの引数を受け入れる関数に取り組んでいます。

これが私のコードです:

int* findMaxElements(int base_array[],int size_of_base_array, int number_of_elements_to_find);

int main( void )
{

    printf("Find Max Values in an Array\n\n");

    // Set up array

    int kinch[6] = {1,2,3,4,5,6};

    // Pass to function and get a pointer to new array filled with only the max elements

    int *given = findMaxElements(kinch,6,3);

    for(int i = 0; i < 3; i++)
    {
        printf("\nMax Value = %d\n", *(given + i));
    }
    return 0;

}

int* findMaxElements(int base_array[],int size_of_base_array, int number_of_elements_to_find)
{

    // Set up all initial variables

    int i,k,c,position;
    int maximum = 0;



    int returnArray[100];

    /*Actual Algorythm */

    for(i = 0; i < number_of_elements_to_find; i++)
    {

        // Get the max value in the base array

        for(k = 0; k < size_of_base_array; k++)
        {
            if(base_array[k] > maximum)
            {
                maximum = base_array[k];
            }
        }

        // Find the position of the max value

        for(position = 0; position < size_of_base_array; position++)
        {

            if(base_array[position] == maximum)
            {
                break;
            }

        }

        // Delete the maximum value from the array and shift everything

        for(c = position - 1; c < size_of_base_array - 1; c++)
        {
            base_array[c] = base_array[c+1];
        }

        // Reduce the size of the array

        size_of_base_array -= 1;

        // Push max value into return array

        returnArray[i] = maximum;

        // Reset max value

        maximum = 0;
    }

    return returnArray;

}

関数のどこかで何かがうまくいかない気がします。

// Set up array

    int kinch[6] = {1,2,3,4,5,6};

    // Pass to function and get a pointer to new array filled with only the max elements

    int *given = findMaxElements(kinch,6,3);

    for(int i = 0; i < 3; i++)
    {
        printf("\nMax Value = %d\n", *(given + i));
    }

6、5、および 4 が配列内で最大の 3 つであるため、これは数値を出力するはずですが、出力は常に 6、6、および 6 です。何が問題なのですか?

4

3 に答える 3

1

K 番目に大きい要素を見つけるための全体的なアプローチは、効率的でエレガントではありません。アルゴリズムを変更することをお勧めしますが、上記の提案では問題なく動作しますが、この問題を解決するには良い方法ではありません。

以下のリンクを調べてアルゴリズムを変更することをお勧めします http://www.geeksforgeeks.org/k-largestor-smallest-elements-in-an-array/

于 2013-04-14T21:48:23.220 に答える