Вот, вроде работает.
| Код |
#include <stdio.h> #include <stdlib.h>
// Размеры матрицы... const int N1 = 4, N2 = 4; // ...и сама матрица int F[N1][N2] = { {1, 5, 9, -90}, {98, 76, -9, 0}, {87, 87, 34, 0}, {0, 76, 87, 98} };
// Количество первых максимальных элементов const int K = 3;
// Временный массив, в нем запомним все элементы матрицы int T[N1*N2];
// Эта функция будет передана qsort как параметр // Ее задача - сравнить два элемента int compareFunc(const void * a, const void * b) { if ( *((int*)a) < *((int*)b) ) return 1; if ( *((int*)a) == *((int*)b) ) return 0; return -1; }
int main(void) { int i, j; for (i=0; i<N1; i++) for (j=0; j<N2; j++) // Здесь мы хотим запомнить все элементы матрицы в массив T T[i*N2 + j] = F[i][j]; // Сортируем... qsort(T, N1 * N2, sizeof(T[0]), compareFunc); // Дальше - выводим (решение на случай, если нужно ИСКЛЮЧАТЬ // повторяющиеся элементы // Будем помещать элементы в тот же массив T // Первый элемент оставляем само собой // В j храним номер, куда будем помещать следующее число j = 1; for (i=1; (i<N1*N2) && (j<K); i++) // Здесь исключаем повторения if (T[i] != T[i-1]) T[j++] = T[i]; // А здесь просто вывод for (i=0; i<j; i++) printf("%d ", T[i]);
return 0; }
|
|