#include /* Zadatak 1. Napisati funkciju koja kojoj su argumenti polje (niz) a prirodnih brojeva (nenegativnih) i cijeli broj n, koji zadaje broj elemenata u polju a. Funkcija mora sortirati polje a silazno po broju razlicitih neparnih djelitelja elemenata u polju. */ /* Realizacija: Sortiranje izborom ekstrema. Dovodimo najveci na pocetak i pamtimo samo indeks najveceg (prema zadanoj funkciji). */ unsigned f(unsigned x) { unsigned djel, broj = 0; for (djel = 1; djel <= x; djel += 2) if (x % djel == 0) ++broj; return broj; } void selection_sort_f(unsigned a[], unsigned n) { unsigned i, j, ind_max, temp; for (i = 0; i < n - 1; ++i) { ind_max = i; for (j = i + 1; j < n; ++j) if ( f(a[j]) > f(a[ind_max]) ) ind_max = j; if (i != ind_max) { temp = a[i]; a[i] = a[ind_max]; a[ind_max] = temp; } } return; } /* Glavni program za demo. */ int main(void) { unsigned n = 7; unsigned a[] = {42, 12, 55, 94, 18, 44, 67}; unsigned i; printf("\n Pocetno polje a i vrijednosti funkcije:\n"); for (i = 0; i < n; ++i) { printf(" a[%2u] = %2u, f = %2u\n", i, a[i], f(a[i])); } selection_sort_f(a, n); printf("\n Sortirano polje a po zadanoj funkciji:\n"); for (i = 0; i < n; ++i) { printf(" a[%2u] = %2u, f = %2u\n", i, a[i], f(a[i])); } return 0; }