/**
* Note: The returned array must be malloced, assume caller calls free().
*/
typedef struct st{
int val;
int cnt;
}st;
int cmp(const void* a,const void* b){
return ((*(st*)a).cnt != (*(st*)b).cnt)?(*(st*)a).cnt-(*(st*)b).cnt :(*(st*)a).val < (*(st*)b).val;
}
int* frequencySort(int* nums, int numsSize, int* returnSize){
st arr[201]={0};
int* ret = (int*)calloc(101,sizeof(int));
int i,pst=0,n=0;
for(i=0; i<numsSize; ++i){
arr[nums[i]+100].val=nums[i];
arr[nums[i]+100].cnt++;
}
qsort(arr,201,sizeof(st),cmp);
for(i=0; i<201; ++i){
while(arr[i].cnt){
ret[pst++]=arr[i].val;
arr[i].cnt--;
}
}
*returnSize=pst;
return ret;
}
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
typedef struct st{
int val;
int cnt;
}st;
int cmp(const void* a,const void* b){
return ((*(st*)a).cnt != (*(st*)b).cnt)?(*(st*)a).cnt-(*(st*)b).cnt :(*(st*)a).val < (*(st*)b).val;
}
int* frequencySort(int* nums, int numsSize, int* returnSize){
st arr[201]={0};
int* ret = (int*)calloc(101,sizeof(int));
int i,pst=0,n=0;
for(i=0; i<numsSize; ++i){
arr[nums[i]+100].val=nums[i];
arr[nums[i]+100].cnt++;
}
qsort(arr,201,sizeof(st),cmp);
for(i=0; i<201; ++i){
while(arr[i].cnt){
ret[pst++]=arr[i].val;
arr[i].cnt--;
}
}
*returnSize=pst;
return ret;
}