给你一个字符串数组 names ,和一个由 互不相同 的正整数组成的数组 heights 。两个数组的长度均为 n 。
对于每个下标 i,names[i] 和 heights[i] 表示第 i 个人的名字和身高。
请按身高 降序 顺序返回对应的名字数组 names 。
示例 1:
输入:names = [“Mary”,“John”,“Emma”], heights = [180,165,170]
输出:[“Mary”,“Emma”,“John”]
解释:Mary 最高,接着是 Emma 和 John 。
示例 2:
输入:names = [“Alice”,“Bob”,“Bob”], heights = [155,185,150]
输出:[“Bob”,“Alice”,“Bob”]
解释:第一个 Bob 最高,然后是 Alice 和第二个 Bob 。
解题代码如下:
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
void swap(char **s1,char **s2){
char *t=*s1;
*s1=*s2;
*s2=t;
}
void quick(int *a,char **names,int low,int high){
if(low<high){
int l=low,h=high,p=a[low];
char t[21];
strcpy(t,names[low]);
while(low<high){
while(low<high&&a[high]<=p){
high--;
}
a[low]=a[high];
if(low!=high)
swap(&(names[low]),&(names[high]));
while(low<high&&a[low]>=p){
low++;
}
a[high]=a[low];
if(low!=high)
swap(&(names[high]),&(names[low]));
}
a[low]=p;
strcpy(names[low],t);
quick(a,names,l,low-1);
quick(a,names,low+1,h);
}
}
char ** sortPeople(char ** names, int namesSize, int* heights, int heightsSize, int* returnSize){
quick(heights,names,0,heightsSize-1);
*returnSize=heightsSize;
return names;
}