2017-04-03 14 views
1

如果我有5个数组和一个包含所有5个数组的指针数组,并且我需要编写一个函数来仅使用指针数组对一个数组进行排序,那么我可以这样做吗?在一个函数中排序5个数组

的函数需要数组从指数1(!)开始,每一个不为0。

int arr1[] = { 3, 9, 6, 7 }; 
int arr2[] = { 2, 5, 5 }; 
int arr3[] = { 0 }; 
int arr4[] = { 1, 6 }; 
int arr5[] = { 4, 5, 6, 2, 1 }; 
int * parr[] = { arr1, arr2, arr3, arr4, arr5 }; 

我知道如何排序一个数组进行排序,但我有点失去了当我试图以最有效的方式使用指针数组对每一个数组进行排序。也许有一个选项来排序每个数组,但在一个循环?因为对于阵列中的每一个做整个“for”循环似乎有点奇怪

注意每个数组的第一个元素指示每个数组的大小。例如:在arr1[0]中是3,因此在该数组中索引0之后的数字量为3(9,6,7)。

+1

'空隙multi_sort(为size_t N,INT *帕尔[N]){对于(为size_t I = 0; I BLUEPIXY

+0

你有没有人为的限制只使用指针数组“以最有效的方式”?即不允许其他变量的创建?是否允许调用库函数?可以覆盖指向未被排序的数组0的指针吗?你的经验水平是什么?即是建议使用循环一个新的想法给你?总之,如果有任何非明显的要求,请解释它们。你可以显示你的代码来排序一个数组吗?即“你试过了什么?”。 – Yunnosch

+0

请[编辑]你的问题,以显示[你迄今为止尝试过的](http://whathaveyoutried.com)。您应该包含您遇到问题的代码[mcve],然后我们可以尝试帮助解决特定问题。你还应该阅读[问]。 –

回答

2

对于数组parr的每个元素,您可以调用循环标准C函数qsort

例如

#include <stdio.h> 
#include <stdlib.h> 

int cmp(const void *a, const void *b) 
{ 
    return (*(const int *)b < *(const int *)a) - 
      (*(const int *)a < *(const int *)b); 
}   

int main(void) 
{ 
    int arr1[] = { 3, 9, 6, 7 }; 
    int arr2[] = { 2, 5, 5 }; 
    int arr3[] = { 0 }; 
    int arr4[] = { 1, 6 }; 
    int arr5[] = { 4, 5, 6, 2, 1 }; 
    int * parr[] = { arr1, arr2, arr3, arr4, arr5 }; 

    const size_t N = sizeof(parr)/sizeof(*parr); 

    for (size_t i = 0; i < N; i++) 
    { 
     qsort(parr[i] + 1, parr[i][0], sizeof(int), cmp); 
    } 

    for (size_t i = 0; i < N; i++) 
    { 
     for (size_t j = 0; j < parr[i][0] + 1; j++) 
     { 
      printf("%d ", parr[i][j]); 
     } 
     putchar('\n'); 
    } 

    return 0; 
} 

程序输出是

3 6 7 9 
2 5 5 
0 
1 6 
4 1 2 5 6 
+0

'该函数需要对从索引1(!)开始并且不是0的数组中的每一个进行排序。“ - 您失败了:D – kaldoran

+0

@kaldoran看起来您无法理解所示的演示程序。 –

+0

我认为你在这里赢了,我已经重读了代码和问题,我的不好。 [顺便说一句,刚开始时应该是个笑话] – kaldoran