#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 u dodatnom polju fa za funkcijske vrijednosti. Dovodimo najveci na pocetak i pamtimo samo indeks najveceg. Sve zamjene radimo istovremeno na pocetnom polju a i polju funkcijskih vrijednosti fa. */ 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 fa[], 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 ( fa[j] > fa[ind_max] ) ind_max = j; if (i != ind_max) { temp = fa[i]; fa[i] = fa[ind_max]; fa[ind_max] = temp; 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}, fa[7]; unsigned i; printf("\n Pocetno polje a i vrijednosti funkcije:\n"); for (i = 0; i < n; ++i) { fa[i] = f(a[i]); printf(" a[%2u] = %2u, f = %2u\n", i, a[i], fa[i]); } selection_sort_f(a, fa, 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], fa[i]); } return 0; }