#include #include #include #include #include #define N 9 unsigned int seznam[] = {7,4,3,6,5,2,8,9,1}; //unsigned int *pSeznam = &seznam[0]; unsigned int *pSeznam = seznam; void izpisi_seznam(unsigned int *pSeznam){ for (int i = 0; i < N; i++) { printf("%d ", *(pSeznam+i)); } printf("\n"); } void primerjaj_in_zamenjaj(unsigned int* a, unsigned int* b){ unsigned int temp; if (*b < *a) { temp = *a; *a = *b; *b = temp; } } void sodi_prehod(unsigned int* pSeznam){ for (int i = 0; i < N-1; i=i+2){ primerjaj_in_zamenjaj(&pSeznam[i], (pSeznam+i+1)); } } void lihi_prehod(unsigned int* pSeznam){ for (int i = 1; i < N-1; i=i+2){ primerjaj_in_zamenjaj(&pSeznam[i], (pSeznam+i+1)); } } int main(){ izpisi_seznam(pSeznam); printf("\n"); for (int i = 0; i < N/2+1; i++) { sodi_prehod(pSeznam); izpisi_seznam(pSeznam); lihi_prehod(pSeznam); izpisi_seznam(pSeznam); } } /* PARALELIZACIJA: - več niti dela en sam prehod - vsaka nit dobi en kos seznama - med prehodi se morajo niti počakati na barieri - Bariere: deklaracija: pthread_barrier_t prepreka; inizializacija: pthread_barrier_init(&prepreka, NULL, stevilo_niti); čakanje na prepreki: vsaka nit kliče pthread_barrier_wait(); na koncu programe: pthread_barrier_destroy(&prepreka); */