#include #include /* Napisz funkcje, ktora dla tablicy n liczb calkowitych A, w ktorej nie wszystkie wyrazy sa rowne, zwroci drugi co do wielkosci element w tablicy. Przyklad: Dla tablicy A = [2, 3, 5, 11, -1, 11, 8, 4], funkcja powinna zwrocic wartosc 8 */ int secondLargest(int arr[], int size) { int largest = arr[0]; //first element is set as the largest at the beginning int secondLargest = INT_MIN; //here we need to set this variable to the smallest possible (TODO: study limits.h) //iterate over array only once for (int i = 1; i < size; i++) { if (arr[i] > largest) { //shifting largest as secondLargest if needed secondLargest = largest; largest = arr[i]; } //heavy duty part else if (arr[i] < largest && (secondLargest == INT_MIN || arr[i] > secondLargest)) { secondLargest = arr[i]; } } return secondLargest; } int secondLargestNaive(int arr[], int size) { //naive algorithm (iterate over array twice) int largest = INT_MIN; for (int i = 0; i < size; i++) if (arr[i]>largest) largest=arr[i]; int secondLargest = INT_MIN; for (int i = 0; i < size; i++) if (arr[i]>secondLargest && arr[i]!=largest) secondLargest=arr[i]; return secondLargest; } int main() { int A[] = {2, 3, 5, 11, -1, 11, 8, 4}; int size = sizeof(A) / sizeof(A[0]); int result = secondLargest(A, size); printf("Drugi co do wielkosci element w tablicy to: %d\n", result); result = secondLargestNaive(A, size); printf("Drugi co do wielkosci element w tablicy to: %d\n", result); return 0; }