Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 3ec08f4

Browse files
添加 0406.根据身高重建队列.md C语言版本
1 parent cfc07d0 commit 3ec08f4

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed

‎problems/0406.根据身高重建队列.md‎

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,53 @@ var reconstructQueue = function(people) {
290290
};
291291
```
292292

293+
### C
294+
```c
295+
int cmp(const void *p1, const void *p2) {
296+
int *pp1 = *(int**)p1;
297+
int *pp2 = *(int**)p2;
298+
// 若身高相同,则按照k从小到大排列
299+
// 若身高不同,按身高从大到小排列
300+
return pp1[0] == pp2[0] ? pp1[1] - pp2[1] : pp2[0] - pp1[0];
301+
}
302+
303+
// 将start与end中间的元素都后移一位
304+
// start为将要新插入元素的位置
305+
void moveBack(int **people, int peopleSize, int start, int end) {
306+
int i;
307+
for(i = end; i > start; i--) {
308+
people[i] = people[i-1];
309+
}
310+
}
311+
312+
int** reconstructQueue(int** people, int peopleSize, int* peopleColSize, int* returnSize, int** returnColumnSizes){
313+
int i;
314+
// 将people按身高从大到小排列(若身高相同,按k从小到大排列)
315+
qsort(people, peopleSize, sizeof(int*), cmp);
316+
317+
for(i = 0; i < peopleSize; ++i) {
318+
// people[i]要插入的位置
319+
int position = people[i][1];
320+
int *temp = people[i];
321+
// 将position到i中间的元素后移一位
322+
// 注:因为已经排好序,position不会比i大。(举例:排序后people最后一位元素最小,其可能的k最大值为peopleSize-2,小于此时的i)
323+
moveBack(people, peopleSize, position, i);
324+
// 将temp放置到position处
325+
people[position] = temp;
326+
327+
}
328+
329+
330+
// 设置返回二维数组的大小以及里面每个一维数组的长度
331+
*returnSize = peopleSize;
332+
*returnColumnSizes = (int*)malloc(sizeof(int) * peopleSize);
333+
for(i = 0; i < peopleSize; ++i) {
334+
(*returnColumnSizes)[i] = 2;
335+
}
336+
return people;
337+
}
338+
```
339+
293340
294341
-----------------------
295342
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width=500> </img></div>

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /