#include #include #define size1 2 #define size2 3 int values[size1][size2] = { {10, 30, 9 }, {11, 12, -12}}; struct IntVec3 {int i; int j; int val;}; int order_q(const void * p1, const void * p2){ struct IntVec3 i1, i2, *pi1, *pi2; //Casting generic pointers to IntVec3 * pi1 = (struct IntVec3 * ) p1; pi2 = (struct IntVec3 * ) p2; // Getting the IntVecs i1 = *pi1; i2 = *pi2; //Returning the difference in the values return (i1.val - i2.val); } int main(){ int i,j; struct IntVec3 TaggedArray[size1][size2]; struct IntVec3 TaggedElement, *vp; // Putting cooridnates {i,j} and count in TaggedArray /* for(i=0;ii = i; vp->j = j; vp->val = values[i][j]; } } //Sorts TaggedArray qsort(TaggedArray, size1*size2, sizeof(struct IntVec3), order_q); for(i=0; i %d\n", vp->i, vp->j, vp->val); } } // Or as a flat array //for(i=0; i %d\n", vp->i, vp->j, vp->val); // } return 0; }