在一个函数中对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 }; 

我知道如何对一个数组进行排序,但是当我尝试以最有效的方式使用指针数组对每一个数组进行排序时,我有点失落。 也许有一个选项可以在一个循环中对每个数组进行排序? 因为为每个arrays做一个完整的“for”循环似乎有点奇怪

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

您可以为数组parr每个元素调用循环标准C函数qsort

例如

 #include  #include  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