//////////////////////////////////////////////////////////////////////// // Sınislausn á Verkefni 2 í Tölvunarfræği 2 // // Hjálmtır Hafsteinsson, apríl 2005 //////////////////////////////////////////////////////////////////////// #include #include #include #include using namespace std; template inline void exch(Item &A, Item &B) { Item t = A; A = B; B = t; } template inline void compexch(Item &A, Item &B) { if (B < A) exch(A, B); } template void insertion(Item a[], int l, int r) { int i; for (i = r; i > l; i--) compexch(a[i-1], a[i]); for (i = l+2; i <= r; i++) { int j = i; Item v = a[i]; while (v < a[j-1]) { a[j] = a[j-1]; j--; } a[j] = v; } } // Partition fall sem gerir ráğ fyrir varğstökum á báğum endum fylkisins template inline int partition(Item a[], int l, int r) { register int i = l-1, j = r; Item v = a[r]; for (;;) { while (a[++i] < v) ; while (v < a[--j]) ; if (i >= j) break; exch(a[i], a[j]); } exch(a[i], a[r]); return i; } const int M = 15; // Hvenær skipta á yfir í Innsetningarröğun // Blönduğ röğun, şar sem Innsetningarröğun er notuğ inní Quicksort til ağ // rağa litlum listum (şegar stærğ <= M) template void quicksorti( Item a[], int l, int r ) { if (r-l <= M) {insertion( a, l, r ); return; } exch(a[(l+r)/2], a[r-1]); compexch(a[l], a[r-1]); compexch(a[l], a[r]); compexch(a[r-1], a[r]); int i = partition(a, l+1, r-1); quicksorti(a, l, i-1); quicksorti(a, i+1, r); } // Samanburğarfall fyrir qsort falliğ int samanb( const void *a, const void *b ) { return ( *(int*)a - *(int*)b ); } // Falliğ fær inn n-staka heiltölufylkiğ a og upphafsstillir şağ şannig ağ // şağ sé næstum şví rağağ. Fjöldi staka sem hefur veriğ færğur til er hf*n void naerRadad( int a[], int n, double hf ) { int fjRugl = n * hf; // Búa til stök í röğ... for( int i=0; i