我正在从事一个项目,该项目以几种不同的方式对指针数组内的数组进行排序,尽管我坚持使用一种排序方式。数组的构建方式是第一个数字指示其后的数字数量。例如,(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 };
此代码用于排序功能
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 <stdio.h>
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
我是一名优秀的程序员,十分优秀!