pointersArray
我想在3697
251
0
16
256
中排序每个数组(每个数组的大小是第一个单元格+ 1),而不对第一个单元格进行排序。以上是我的非工作代码,修复它的任何想法?
输出:
3679
215
0
16
41256
预期产出:
NumSet::NumSet()
{
srand(time(0));
for (int i = 0; i < C_NUM; i++) {//Generate 2 random arrays.
n_cards[i] = (rand() % 10) + 1;
}
}
答案 0 :(得分:2)
你在这里。
#include <stdio.h>
int main( void )
{
int arr1[] = { 3, 9, 6, 7 };
int arr2[] = { 2, 5, 1 };
int arr3[] = { 0 };
int arr4[] = { 1, 6 };
int arr5[] = { 4, 5, 6, 2, 1 };
int * pointersArray[] = { arr1, arr2, arr3, arr4, arr5 };
const size_t N = sizeof( pointersArray ) / sizeof( *pointersArray );
for ( size_t k = 0; k < N; ++k )
{
size_t n = *pointersArray[k];
for ( size_t i = 0; i < n; i++ )
{
for ( size_t j = 1; j < n - i; j++ )
{
if ( pointersArray[k][j+1] < pointersArray[k][j] )
{
int tmp = pointersArray[k][j+1];
pointersArray[k][j+1] = pointersArray[k][j];
pointersArray[k][j] = tmp;
}
}
}
}
for ( size_t k = 0; k < N; ++k )
{
size_t n = *pointersArray[k] + 1;
for ( size_t i = 0; i < n; i++ ) printf( "%d ", pointersArray[k][i] );
printf( "\n" );
}
}
程序输出
3 6 7 9
2 1 5
0
1 6
4 1 2 5 6
考虑到它会更简单,如果您使用标准C函数qsort
而不是手动编写冒泡排序函数,代码会更清晰。
例如
#include <stdlib.h>
#include <stdio.h>
int cmp( const void *lhs, const void *rhs )
{
int a = *( int * )lhs;
int b = *( int * )rhs;
return ( b < a ) - ( a < b );
}
int main( void )
{
int arr1[] = { 3, 9, 6, 7 };
int arr2[] = { 2, 5, 1 };
int arr3[] = { 0 };
int arr4[] = { 1, 6 };
int arr5[] = { 4, 5, 6, 2, 1 };
int * pointersArray[] = { arr1, arr2, arr3, arr4, arr5 };
const size_t N = sizeof( pointersArray ) / sizeof( *pointersArray );
for ( size_t i = 0; i < N; ++i )
{
qsort( pointersArray[i] + 1, *pointersArray[i], sizeof( int ), cmp );
}
for ( size_t k = 0; k < N; ++k )
{
size_t n = *pointersArray[k] + 1;
for ( size_t i = 0; i < n; i++ ) printf( "%d ", pointersArray[k][i] );
printf( "\n" );
}
}
输出与上面显示的相同
3 6 7 9
2 1 5
0
1 6
4 1 2 5 6
在C ++中,您可以使用标头std::sort
中声明的标准算法<algorithm>
。
例如
#include <iostream>
#include <algorithm>
int main()
{
int arr1[] = { 3, 9, 6, 7 };
int arr2[] = { 2, 5, 1 };
int arr3[] = { 0 };
int arr4[] = { 1, 6 };
int arr5[] = { 4, 5, 6, 2, 1 };
int * pointersArray[] = { arr1, arr2, arr3, arr4, arr5 };
for ( auto p : pointersArray )
{
std::sort( p + 1, p + 1 + *p );
}
for ( auto p : pointersArray )
{
size_t n = *p + 1;
for ( size_t i = 0; i < n; i++ ) std::cout << p[i] << ' ';
std::cout << std::endl;
}
}
输出
3 6 7 9
2 1 5
0
1 6
4 1 2 5 6