如何使用气泡排序或选择排序按降序对指针数组中的数组进行排序?

我正在研究一个项目,它以几种不同的方式对指针数组中的数组进行排序,但我仍然坚持一种排序方式。 arrays的构建方式是第一个数字表示后面的数字量。 例如,(3,0,23,1):此数组在第一个索引后有3个数字)。 我想从最低到最高的数字对数组进行排序, 但我不想更改第一个索引,这意味着数组看起来像这样(3,0,1,23)。 这些是数组和指针数组:

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[SIZE] = { arr1, arr2, arr3, arr4, arr5 }; 

此代码用于排序function

 for (i = 0; i < SIZE; i++) { for (j = 1; j < pArr[i][0]+1; j++) { if (pArr[i][j] < pArr[i][j - 1]) { temp = pArr[i][j]; pArr[i][j] = pArr[i][j - 1]; pArr[i][j - 1] = temp; } } } 

我只想使用冒泡排序或选择排序,因为我是编程新手,并且对其他排序方法不太了解。

这个给你。

 #include  void bubble_sort( int a[], size_t n ) { for ( size_t last = n; !( n < 2 ); n = last ) { for ( size_t i = last = 1; i < n; i++ ) { if ( a[i] < a[i-1] ) { int tmp = a[i]; a[i] = a[i-1]; a[i-1] = tmp; last = i; } } } } void sort_multiple_arrays( int * a[], size_t n ) { for ( size_t i = 0; i < n; i++ ) { bubble_sort( a[i] + 1, a[i][0] ); } } 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 ); sort_multiple_arrays( parr, N ); 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