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