Mercurial > hg > smallbox
annotate Problems/private/omputils.c @ 52:a8a32e130893
(none)
author | idamnjanovic |
---|---|
date | Mon, 14 Mar 2011 16:52:43 +0000 |
parents | 217a33ac374e |
children |
rev | line source |
---|---|
idamnjanovic@51 | 1 /************************************************************************** |
idamnjanovic@51 | 2 * |
idamnjanovic@51 | 3 * File name: omputils.c |
idamnjanovic@51 | 4 * |
idamnjanovic@51 | 5 * Ron Rubinstein |
idamnjanovic@51 | 6 * Computer Science Department |
idamnjanovic@51 | 7 * Technion, Haifa 32000 Israel |
idamnjanovic@51 | 8 * ronrubin@cs |
idamnjanovic@51 | 9 * |
idamnjanovic@51 | 10 * Last Updated: 18.8.2009 |
idamnjanovic@51 | 11 * |
idamnjanovic@51 | 12 *************************************************************************/ |
idamnjanovic@51 | 13 |
idamnjanovic@51 | 14 #include "omputils.h" |
idamnjanovic@51 | 15 #include <math.h> |
idamnjanovic@51 | 16 |
idamnjanovic@51 | 17 |
idamnjanovic@51 | 18 const char FULL_GAMMA_STR[] = "full"; |
idamnjanovic@51 | 19 const char SPARSE_GAMMA_STR[] = "sparse"; |
idamnjanovic@51 | 20 |
idamnjanovic@51 | 21 |
idamnjanovic@51 | 22 /* convert seconds to hours, minutes and seconds */ |
idamnjanovic@51 | 23 |
idamnjanovic@51 | 24 void secs2hms(double sectot, int *hrs, int *mins, double *secs) |
idamnjanovic@51 | 25 { |
idamnjanovic@51 | 26 *hrs = (int)(floor(sectot/3600)+1e-2); |
idamnjanovic@51 | 27 sectot = sectot - 3600*(*hrs); |
idamnjanovic@51 | 28 *mins = (int)(floor(sectot/60)+1e-2); |
idamnjanovic@51 | 29 *secs = sectot - 60*(*mins); |
idamnjanovic@51 | 30 } |
idamnjanovic@51 | 31 |
idamnjanovic@51 | 32 |
idamnjanovic@51 | 33 /* quicksort, public-domain C implementation by Darel Rex Finley. */ |
idamnjanovic@51 | 34 /* modification: sorts the array data[] as well, according to the values in the array vals[] */ |
idamnjanovic@51 | 35 |
idamnjanovic@51 | 36 #define MAX_LEVELS 300 |
idamnjanovic@51 | 37 |
idamnjanovic@51 | 38 void quicksort(mwIndex vals[], double data[], mwIndex n) { |
idamnjanovic@51 | 39 |
idamnjanovic@51 | 40 long piv, beg[MAX_LEVELS], end[MAX_LEVELS], i=0, L, R, swap ; |
idamnjanovic@51 | 41 double datapiv; |
idamnjanovic@51 | 42 |
idamnjanovic@51 | 43 beg[0]=0; |
idamnjanovic@51 | 44 end[0]=n; |
idamnjanovic@51 | 45 |
idamnjanovic@51 | 46 while (i>=0) { |
idamnjanovic@51 | 47 |
idamnjanovic@51 | 48 L=beg[i]; |
idamnjanovic@51 | 49 R=end[i]-1; |
idamnjanovic@51 | 50 |
idamnjanovic@51 | 51 if (L<R) { |
idamnjanovic@51 | 52 |
idamnjanovic@51 | 53 piv=vals[L]; |
idamnjanovic@51 | 54 datapiv=data[L]; |
idamnjanovic@51 | 55 |
idamnjanovic@51 | 56 while (L<R) |
idamnjanovic@51 | 57 { |
idamnjanovic@51 | 58 while (vals[R]>=piv && L<R) |
idamnjanovic@51 | 59 R--; |
idamnjanovic@51 | 60 if (L<R) { |
idamnjanovic@51 | 61 vals[L]=vals[R]; |
idamnjanovic@51 | 62 data[L++]=data[R]; |
idamnjanovic@51 | 63 } |
idamnjanovic@51 | 64 |
idamnjanovic@51 | 65 while (vals[L]<=piv && L<R) |
idamnjanovic@51 | 66 L++; |
idamnjanovic@51 | 67 if (L<R) { |
idamnjanovic@51 | 68 vals[R]=vals[L]; |
idamnjanovic@51 | 69 data[R--]=data[L]; |
idamnjanovic@51 | 70 } |
idamnjanovic@51 | 71 } |
idamnjanovic@51 | 72 |
idamnjanovic@51 | 73 vals[L]=piv; |
idamnjanovic@51 | 74 data[L]=datapiv; |
idamnjanovic@51 | 75 |
idamnjanovic@51 | 76 beg[i+1]=L+1; |
idamnjanovic@51 | 77 end[i+1]=end[i]; |
idamnjanovic@51 | 78 end[i++]=L; |
idamnjanovic@51 | 79 |
idamnjanovic@51 | 80 if (end[i]-beg[i] > end[i-1]-beg[i-1]) { |
idamnjanovic@51 | 81 swap=beg[i]; beg[i]=beg[i-1]; beg[i-1]=swap; |
idamnjanovic@51 | 82 swap=end[i]; end[i]=end[i-1]; end[i-1]=swap; |
idamnjanovic@51 | 83 } |
idamnjanovic@51 | 84 } |
idamnjanovic@51 | 85 else { |
idamnjanovic@51 | 86 i--; |
idamnjanovic@51 | 87 } |
idamnjanovic@51 | 88 } |
idamnjanovic@51 | 89 } |