Есть три проблемы с вашим кодом.
Во-первых, когда вы передаете массив в качестве аргумента своей функции, он распадается на указатель.Таким образом, функция никогда не сможет узнать размер массива без дополнительной информации.Задача main()
состоит в том, чтобы найти размер массива и передать эту информацию в largest()
.
Во-вторых, в вашем коде возникла ошибка, потому что вы пытаетесьитерировать от 0
до количества элементов в массиве.
Будет работать следующее:
#include <iostream>
using namespace std;
int largest(int a[],int k, int n){
for (int i = 0; i < n; i++){
for (int j = i + 1; j < n; j++){
if (a[j] > a[i]){
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
return a[k-1];
}
int main()
{
int a[] = {3, 2, 1, 0, 5, 10};
int k = 4;
int m = largest(a, k, sizeof a/ sizeof *a);
cout << m << endl;
}
Наконец, но не в последнюю очередь, у вас есть неприятные побочные эффекты в вашей функции.Если у вас есть функция, которая должна найти самый большой элемент массива, она не должна изменять весь массив для этого.
Вы можете сделать копию исходного массива и отсортировать ее.Или вы можете реализовать алгоритм сортировки по k-элементам.В любом случае вам не следует изменять пользовательские данные, просто чтобы найти из них статистику.