#include <stdio.h>
#include <stdlib.h>
// расскомментируйте эту строчку и thread_local в следующей,
// если, вдруг, ваш компилятор поддерживает этот заголовок :)
// #include <threads.h>
/* thread_local */ int column_;
int comparator(const void *element1, const void *element2) {
int *line1 = (int *) element1;
int *line2 = (int *) element2;
for (int j = 0; j < column_; ++j) {
if (line1[j] != line2[j]) {
return line2[j] - line1[j];
}
}
return 0;
}
void sortMatrix(int **array, int row, int column) {
column_ = column;
qsort(array
, (size_t) row
, sizeof(int *), comparator
); }
int main() {
int row = 4;
int column = 4;
// этот массив нужен только для удобства инициализации основного массива
int arrayOnStack[4][4] = {
{2, 3, 4, 5},
{2, 1, 5, 6},
{2, 1, 3, 4},
{1, 2, 3, 4}
};
int **array
= (int **) malloc(sizeof(int *) * row
); for (int i = 0; i < row; ++i) {
array
[i
] = (int *) malloc(sizeof(int) * column
); for (int j = 0; j < column; ++j) {
array[i][j] = arrayOnStack[i][j];
}
}
for (int i = 0; i < row; ++i) {
for (int j = 0; j < column; ++j) {
printf("%d%c", array
[i
][j
], " \n"[j
== column
- 1]); }
}
sortMatrix((int **) array, row, column);
printf("После сортировки:\n"); for (int i = 0; i < row; ++i) {
for (int j = 0; j < column; ++j) {
printf("%d%c", array
[i
][j
], " \n"[j
== column
- 1]); }
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCi8vINGA0LDRgdGB0LrQvtC80LzQtdC90YLQuNGA0YPQudGC0LUg0Y3RgtGDINGB0YLRgNC+0YfQutGDINC4IHRocmVhZF9sb2NhbCDQsiDRgdC70LXQtNGD0Y7RidC10LksCi8vINC10YHQu9C4LCDQstC00YDRg9CzLCDQstCw0Ygg0LrQvtC80L/QuNC70Y/RgtC+0YAg0L/QvtC00LTQtdGA0LbQuNCy0LDQtdGCINGN0YLQvtGCINC30LDQs9C+0LvQvtCy0L7QuiA6KQovLyAjaW5jbHVkZSA8dGhyZWFkcy5oPgovKiB0aHJlYWRfbG9jYWwgKi8gaW50IGNvbHVtbl87CgppbnQgY29tcGFyYXRvcihjb25zdCB2b2lkICplbGVtZW50MSwgY29uc3Qgdm9pZCAqZWxlbWVudDIpIHsKCWludCAqbGluZTEgPSAoaW50ICopIGVsZW1lbnQxOwoJaW50ICpsaW5lMiA9IChpbnQgKikgZWxlbWVudDI7Cglmb3IgKGludCBqID0gMDsgaiA8IGNvbHVtbl87ICsraikgewoJCWlmIChsaW5lMVtqXSAhPSBsaW5lMltqXSkgewoJCQlyZXR1cm4gbGluZTJbal0gLSBsaW5lMVtqXTsKCQl9Cgl9CglyZXR1cm4gMDsKfQoKdm9pZCBzb3J0TWF0cml4KGludCAqKmFycmF5LCBpbnQgcm93LCBpbnQgY29sdW1uKSB7Cgljb2x1bW5fID0gY29sdW1uOwoJcXNvcnQoYXJyYXksIChzaXplX3QpIHJvdywgc2l6ZW9mKGludCAqKSwgY29tcGFyYXRvcik7Cn0KCmludCBtYWluKCkgewoJaW50IHJvdyA9IDQ7CglpbnQgY29sdW1uID0gNDsKCi8vCdGN0YLQvtGCINC80LDRgdGB0LjQsiDQvdGD0LbQtdC9INGC0L7Qu9GM0LrQviDQtNC70Y8g0YPQtNC+0LHRgdGC0LLQsCDQuNC90LjRhtC40LDQu9C40LfQsNGG0LjQuCDQvtGB0L3QvtCy0L3QvtCz0L4g0LzQsNGB0YHQuNCy0LAKCWludCBhcnJheU9uU3RhY2tbNF1bNF0gPSB7CgkJCXsyLCAzLCA0LCA1fSwKCQkJezIsIDEsIDUsIDZ9LAoJCQl7MiwgMSwgMywgNH0sCgkJCXsxLCAyLCAzLCA0fQoJfTsKCglpbnQgKiphcnJheSA9IChpbnQgKiopIG1hbGxvYyhzaXplb2YoaW50ICopICogcm93KTsKCWZvciAoaW50IGkgPSAwOyBpIDwgcm93OyArK2kpIHsKCQlhcnJheVtpXSA9IChpbnQgKikgbWFsbG9jKHNpemVvZihpbnQpICogY29sdW1uKTsKCQlmb3IgKGludCBqID0gMDsgaiA8IGNvbHVtbjsgKytqKSB7CgkJCWFycmF5W2ldW2pdID0gYXJyYXlPblN0YWNrW2ldW2pdOwoJCX0KCX0KCglwcmludGYoItCU0L4g0YHQvtGA0YLQuNGA0L7QstC60Lg6XG4iKTsKCWZvciAoaW50IGkgPSAwOyBpIDwgcm93OyArK2kpIHsKCQlmb3IgKGludCBqID0gMDsgaiA8IGNvbHVtbjsgKytqKSB7CgkJCXByaW50ZigiJWQlYyIsIGFycmF5W2ldW2pdLCAiIFxuIltqID09IGNvbHVtbiAtIDFdKTsKCQl9Cgl9CgoJc29ydE1hdHJpeCgoaW50ICoqKSBhcnJheSwgcm93LCBjb2x1bW4pOwoKCXByaW50ZigiXG4iKTsKCXByaW50Zigi0J/QvtGB0LvQtSDRgdC+0YDRgtC40YDQvtCy0LrQuDpcbiIpOwoJZm9yIChpbnQgaSA9IDA7IGkgPCByb3c7ICsraSkgewoJCWZvciAoaW50IGogPSAwOyBqIDwgY29sdW1uOyArK2opIHsKCQkJcHJpbnRmKCIlZCVjIiwgYXJyYXlbaV1bal0sICIgXG4iW2ogPT0gY29sdW1uIC0gMV0pOwoJCX0KCX0KCXJldHVybiAwOwp9