#include <stdio.h>
#include <stdlib.h>
// Define a type to hold the score together with the name of the player
typedef struct
{
char name[42];
int score;
} PlayerStats;
// Make a compare function to be used by qsort
int cmpfunc (const void * a, const void * b){
const PlayerStats* pA = a;
const PlayerStats* pB = b;
if (pA->score > pB->score) return -1;
if (pA->score < pB->score) return 1;
return 0;
}
// A function for printing the players and their score
void print_stats(PlayerStats *ps, int n)
{
for(int i
=0; i
<n
; ++i
) printf("%s : score=%d\n", ps
[i
].
name, ps
[i
].
score); }
int main(){
// Make an array of players with scores.
PlayerStats player_stats[3] = {{"p1", 17}, {"p2", 9}, {"p3", 42}};
size_t numElements = sizeof player_stats / sizeof player_stats[0];
size_t sizeElement = sizeof player_stats[0];
print_stats(player_stats, numElements);
// Use the standard qsort for sorting the array
qsort(player_stats
, numElements
, sizeElement
, cmpfunc
);
print_stats(player_stats, numElements);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCi8vIERlZmluZSBhIHR5cGUgdG8gaG9sZCB0aGUgc2NvcmUgdG9nZXRoZXIgd2l0aCB0aGUgbmFtZSBvZiB0aGUgcGxheWVyCnR5cGVkZWYgc3RydWN0CnsKICAgIGNoYXIgbmFtZVs0Ml07CiAgICBpbnQgc2NvcmU7Cn0gUGxheWVyU3RhdHM7CgovLyBNYWtlIGEgY29tcGFyZSBmdW5jdGlvbiB0byBiZSB1c2VkIGJ5IHFzb3J0CmludCBjbXBmdW5jIChjb25zdCB2b2lkICogYSwgY29uc3Qgdm9pZCAqIGIpewogICAgY29uc3QgUGxheWVyU3RhdHMqIHBBID0gYTsKICAgIGNvbnN0IFBsYXllclN0YXRzKiBwQiA9IGI7CiAgICBpZiAocEEtPnNjb3JlID4gcEItPnNjb3JlKSByZXR1cm4gLTE7CiAgICBpZiAocEEtPnNjb3JlIDwgcEItPnNjb3JlKSByZXR1cm4gMTsKICAgIHJldHVybiAwOwp9CgovLyBBIGZ1bmN0aW9uIGZvciBwcmludGluZyB0aGUgcGxheWVycyBhbmQgdGhlaXIgc2NvcmUKdm9pZCBwcmludF9zdGF0cyhQbGF5ZXJTdGF0cyAqcHMsIGludCBuKQp7CiAgICBmb3IoaW50IGk9MDsgaTxuOyArK2kpIHByaW50ZigiJXMgOiBzY29yZT0lZFxuIiwgcHNbaV0ubmFtZSwgcHNbaV0uc2NvcmUpOwp9CgppbnQgbWFpbigpewogICAgLy8gTWFrZSBhbiBhcnJheSBvZiBwbGF5ZXJzIHdpdGggc2NvcmVzLgogICAgUGxheWVyU3RhdHMgcGxheWVyX3N0YXRzWzNdID0ge3sicDEiLCAxN30sIHsicDIiLCA5fSwgeyJwMyIsIDQyfX07CiAgICBzaXplX3QgbnVtRWxlbWVudHMgPSBzaXplb2YgcGxheWVyX3N0YXRzIC8gc2l6ZW9mIHBsYXllcl9zdGF0c1swXTsKICAgIHNpemVfdCBzaXplRWxlbWVudCA9IHNpemVvZiBwbGF5ZXJfc3RhdHNbMF07CgogICAgcHJpbnRmKCJVbnNvcnRlZDpcbiIpOwogICAgcHJpbnRfc3RhdHMocGxheWVyX3N0YXRzLCBudW1FbGVtZW50cyk7CgogICAgLy8gVXNlIHRoZSBzdGFuZGFyZCBxc29ydCBmb3Igc29ydGluZyB0aGUgYXJyYXkKICAgIHFzb3J0KHBsYXllcl9zdGF0cywgbnVtRWxlbWVudHMsIHNpemVFbGVtZW50LCBjbXBmdW5jKTsKCiAgICBwcmludGYoIlNvcnRlZDpcbiIpOwogICAgcHJpbnRfc3RhdHMocGxheWVyX3N0YXRzLCBudW1FbGVtZW50cyk7CgogICAgcmV0dXJuIDA7Cn0K