0
我的问题是如何排序arr6
所有其他数组中的第一个数字。 我的意思是,如果arr1
在第一个num
中有3个,这意味着它需要在arr6
中为3。 最后,arr6
需要首先指向arr3
,arr4
,arr2
,arr1
,arr5
。在C中,如何对每个指针指向一个int变长数组的指针数组进行排序?
#include <stdio.h>
#include <stdlib.h>
void sort_arr(int **arr6);
void print_arr(int **arr6);
void order_arr(int **arr6);
int main(void)
{
int i = 1;
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* arr6[] = { arr1, arr2, arr3, arr4, arr5 };
printf("Printing: \n");
print_arr(&arr6);
sort_arr(&arr6);
printf("Sorted rows\n");
print_arr(&arr6);
printf("Ordered array:\n");
order_arr(&arr6);
system("PAUSE");
return 0;
}
void sort_arr(int **arr6)
{
int c = 0, d = 0,k = 0, swap = 0;
for (k; k < sizeof(arr6)+1; k++)
{
for (c = 1; c < (arr6[k][0] + 1); c++)
{
for (d = 1; d < arr6[k][0]; d++)
{
if (arr6[k][d] > arr6[k][d + 1])
{
swap = arr6[k][d];
arr6[k][d] = arr6[k][d + 1];
arr6[k][d + 1] = swap;
}
}
}
}
}
void print_arr(int **arr6)
{
int c = 0, k = 0;
for (k = 0; k < sizeof(arr6) + 1; k++)
{
for (c = 1; c < (arr6[k][0] + 1); c++)
{
printf("%d ", arr6[k][c]);
}
printf("\n");
}
}
小心!首先定义'arr6'应该被排序的标准?然后小心应用该标准,以便将指针混合到正确的顺序。我之前看到过这些数据 - 单个数组中的第一个条目是该数组中其他条目的数目。在排序数组数组之前,是否需要对每个组件数组进行排序? –
小心:'sizeof(arr6)'是(衰减的)指针参数的大小,而不是初始数组的大小。将数组传递给函数时,通常应该使用它来传递大小。 –
是的,我先排序所有数组(arr1 - arr5)然后我需要排序arr。 – Michael2411