|
1 | 1 | #include <stdio.h>
|
2 | 2 | #include <stdlib.h>
|
3 | 3 | #include <math.h>
|
| 4 | +#include <string.h> |
4 | 5 |
|
5 | 6 | // n = rows
|
6 | 7 | // dim = columns
|
|
10 | 11 | int getColumns(FILE*);
|
11 | 12 | int getRows(FILE*);
|
12 | 13 |
|
13 |
| -double **getData(FILE*,int ,int ,double **); |
| 14 | +float *getData(FILE*,int ,int ,float *); |
14 | 15 | void writeFile(FILE*,int,int,double **);
|
15 | 16 | double **transformPositive(int,int,double **);
|
16 | 17 | void qS(double *,int ,int);
|
17 | 18 | int partition(double *,int ,int);
|
| 19 | +void qSort(float *,int); |
18 | 20 |
|
19 | 21 |
|
20 | 22 |
|
@@ -148,20 +150,43 @@ int getColumns(FILE* Dataset)
|
148 | 150 |
|
149 | 151 | return dim;
|
150 | 152 | }
|
151 |
| -double **getData(FILE* Dataset,int n,int dim,double **X) |
| 153 | +float *getData(FILE* Dataset,int n,int dim,float *X) |
152 | 154 | {
|
153 | 155 | int i;
|
154 | 156 | int d;
|
155 | 157 | while(!feof(Dataset))
|
156 |
| - for (i = 0; i < n; i++) |
| 158 | + for (i = n; i--;) |
157 | 159 | {
|
158 |
| - for (d = 0; d < dim; d++) |
| 160 | + for (d = dim; d--;) |
159 | 161 | {
|
160 |
| - fscanf(Dataset, "%lf,", &X[i][d]); |
| 162 | + fscanf(Dataset, "%f", &X[i*dim + d]); |
161 | 163 | }
|
162 | 164 | }
|
163 | 165 |
|
164 | 166 | return X;
|
165 | 167 |
|
166 | 168 |
|
167 | 169 | }
|
| 170 | + |
| 171 | + |
| 172 | + |
| 173 | +void qSort(float *arr, int elements) { |
| 174 | + |
| 175 | + #define MAX_LEVELS 300 |
| 176 | + |
| 177 | + float piv, beg[MAX_LEVELS], end[MAX_LEVELS], swap ; |
| 178 | + int i=0, L, R; |
| 179 | + beg[0]=0; end[0]=elements; |
| 180 | + while (i>=0) { |
| 181 | + L=beg[i]; R=end[i]-1; |
| 182 | + if (L<R) { |
| 183 | + piv=arr[L]; |
| 184 | + while (L<R) { |
| 185 | + while (arr[R]>=piv && L<R) R--; if (L<R) arr[L++]=arr[R]; |
| 186 | + while (arr[L]<=piv && L<R) L++; if (L<R) arr[R--]=arr[L]; } |
| 187 | + arr[L]=piv; beg[i+1]=L+1; end[i+1]=end[i]; end[i++]=L; |
| 188 | + if (end[i]-beg[i]>end[i-1]-beg[i-1]) { |
| 189 | + swap=beg[i]; beg[i]=beg[i-1]; beg[i-1]=swap; |
| 190 | + swap=end[i]; end[i]=end[i-1]; end[i-1]=swap; }} |
| 191 | + else { |
| 192 | + i--; }}} |
0 commit comments