#include "time.h"
#include "stdlib.h"
#include "stdio.h"
//N x M parameters
static int rows = 7;
static int columns = 10;
int row_compare(const void * first_row, const void * second_row)
{
const int * first_row_1 = *(const int**)first_row;
const int * second_row_1 = *(const int**)second_row;
if (first_row_1[columns] < second_row_1[columns])
return -1;
else if (first_row_1[columns] > second_row_1[columns])
return 1;
else
return 0;
}
void print_array(int ** arr)
{
printf("\nARRAY:\n");
for(int i = 0; i < rows; i++)
{
printf("ROW %d:", i);
for(int j = 0; j < columns; j++)
{
printf("%4d ", arr[i][j]);
}
printf("METRIC: %d\n", arr[i][columns]);
}
}
int main(int argc, char* argv[])
{
//init values
srand((unsigned)time(NULL));
//allocs
int ** my_array = (int**)malloc(sizeof(int*) * rows); //allocate pointers to rows
for (int i = 0; i < rows; i++)
my_array[i] = (int*)malloc(sizeof(int) * (columns+1)); //allocate the whole row + place for metric
//fill the array + calculate the metric
for (int i = 0; i < rows; i++)
{
//fill row with random values
for (int j = 0; j < columns; j++)
my_array[i][j] = (rand() % 20) - 10;
//calculate metric for a row
int metric = 0;
for (int j = 0; j < columns; j++)
{
int elem = my_array[i][j];
if ( (elem % 2) != 0 && elem < 0)
metric += elem;
}
my_array[i][columns] = metric; //metric value
}
print_array(my_array);
//sort it!
qsort(my_array, rows, sizeof(int*), row_compare);
print_array(my_array);
system("pause");
//free everything
for (int i = 0; i < rows; i++)
free(my_array[i]);
free(my_array);
return 0;
}