Итак, я просто работаю над кодом C, в частности функцией, которая принимает 3 аргумента: массив, размер массива и количество возвращаемых максимальных элементов.C Max Numbers In Array Algorithm
Вот мой код:
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, потому что они являются тремя крупнейшими в массиве, однако выход я всегда 6, 6 и 6. Что случилось с ним?
Переполнение массива также является проблемой. Я бы рекомендовал передать массив, чтобы получить возвращаемые значения. Использование массива 'static' - это, безусловно, решение с одним словом, которое« работает », но это означает, что вы не разрешаете повторному вводу кода. За один раз может выполняться только один вызов, и последний вызов «выигрывает». –
@JonathanLeffler вы правы. Выделение массива из 100 элементов «просто для того, чтобы быть в безопасности», а не проверка того, что 'number_of_elements_to_find' меньше 100, является проблемой, ожидающей ее появления; Мне нравится решение иметь пространство, выделенное вызывающей процедурой. – Floris
Спасибо, ребята. Я изменил код, и теперь он работает. Я также добавил дополнительный параметр к функции, которая сохранит максимальные значения и избавится от выделения из 100 элементов в локальном массиве. – turnt