给你一个字符串数组 names ,和一个由 互不相同 的正整数组成的数组 heights。两个数组的长度均为 n 。
对于每个下标 i, names[i]
和 heights[i]
表示第 i 个人的名字和身高。
请按身高 降序 顺序返回对应的名字数组 names 。
题目链接:https://leetcode.cn/problems/sort-the-people/
# 解题思路
快速排序模板
# 提交结果
# 代码
class Solution { | |
public String[] sortPeople(String[] names, int[] heights) { | |
quickSort(names, heights,0,heights.length-1); | |
return names; | |
} | |
private void quickSort(String[] names, int[] heights, int lo, int hi){ | |
if(lo >= hi) return; | |
int povit = heights[lo]; | |
String ts = names[lo]; | |
int i = lo; | |
int j = hi; | |
while(i < j) { | |
// 从右边找第一个 > povit | |
while(i < j && heights[j] <= povit) --j; | |
heights[i] = heights[j]; | |
names[i] = names[j]; | |
// 从左边开始找第一个 < povit | |
while(i < j && heights[i] >= povit) ++i; | |
heights[j] = heights[i]; | |
names[j] = names[i]; | |
} | |
heights[i] = povit; | |
names[i] = ts; | |
quickSort(names, heights, lo, i-1); | |
quickSort(names, heights, i+1, hi); | |
} | |
} |