解题思路:
1.建立2行的二维数组:第0行存值,第1行存值对应的频率;
2.选择排序:值的频率升序,值的频率相等,值本身降序;
3.将二维数组存入一维数组。
int* frequencySort(int* nums, int numsSize, int* returnSize){
int arr[2][100];
arr[0][0]=nums[0];arr[1][0]=0;
int counter=1;//记录数组不同元素个数
int i,j;
for(i=0;i<numsSize;i++){
for(j=0;j<counter;j++){
if(nums[i]==arr[0][j]){
arr[1][j]++;
break;
}
}
if(j==counter){//如果出现新元素,计数器+1,并更新arr数组
counter++;
arr[0][j]=nums[i];
arr[1][j]=1;
}
}
int temp=0;
for (int i = 0; i < counter-1; i++)//选择排序
{
int min = i;
for (int j = i+1; j < counter; j++)
{
if (arr[1][j] < arr[1][min])//值的频率升序
{
min = j;
}
if((arr[1][j] == arr[1][min])&&(arr[0][j] > arr[0][min])){//值的频率相等,值本身降序
min = j;
}
}
temp=arr[1][i];arr[1][i]=arr[1][min];arr[1][min]=temp;//交换arr数组值频率
temp=arr[0][i];arr[0][i]=arr[0][min];arr[0][min]=temp;//交换arr数组值
}
int* arr1=(int *)malloc(sizeof(int)*numsSize);
int n=0;
for(int i=0;i<counter;i++){
for(int j=0;j<arr[1][i];j++){
arr1[n++]=arr[0][i];
}
}
*returnSize=numsSize;
return arr1;
}