323{
324
325
326
327
328
329
332
333
334
335 int *column_order = new int[ncols];
336 int *ord = new int[ncols];
337
339
340
341
342 C.reset_ncomparisons();
343
344 clock_t begin_time0 = clock();
345 for (int i = 0; i < ncols; i++)
346 {
347 column_order[i] = i;
348 }
349
350 if (
M2_gbTrace >= 2) fprintf(stderr,
"ncomparisons = ");
351
352
353
354
355 std::stable_sort(column_order, column_order + ncols, C);
356
357
358
359
360 clock_t end_time0 = clock();
361 if (
M2_gbTrace >= 2) fprintf(stderr,
"%ld, ", C.ncomparisons0());
362 double nsecs0 = (double)(end_time0 - begin_time0) / CLOCKS_PER_SEC;
364 if (
M2_gbTrace >= 2) fprintf(stderr,
" time = %f\n", nsecs0);
365
367
368 for (int i = 0; i < ncols; i++)
369 {
370 ord[column_order[i]] = i;
371 }
372
373
375 newcols.reserve(ncols);
376 for (int i = 0; i < ncols; i++)
377 {
378 long newc = column_order[i];
379 newcols.push_back(
mat->columns[newc]);
380 }
381
382
383 for (int r = 0; r < nrows; r++)
384 {
385 row_elem &row =
mat->rows[r];
386 for (
int i = 0; i < row.
len; i++)
387 {
388 int oldcol = row.
comps[i];
389 int newcol = ord[oldcol];
390 row.
comps[i] = newcol;
391 }
392 for (
int i = 1; i < row.
len; i++)
393 {
395 {
396 fprintf(stderr, "Internal error: array out of order\n");
397 break;
398 }
399 }
400 }
401
403 delete [] column_order;
404 delete [] ord;
405
406
407}
const MonomialInfo * mMonomialInfo
double clock_sort_columns
void swap(mpfr::mpreal &x, mpfr::mpreal &y)
std::vector< column_elem > column_array