Вы имеете в виду следующее?
#include <iostream>
#include <iomanip>
#include <cstdlib>
int cmp( const void *a, const void *b )
{
const int *p1 = ( const int * )a;
const int *p2 = ( const int * )b;
return ( p2[2] < p1[2] ) - ( p1[2] < p2[2] );
}
int main()
{
int a[] = { 33888, 32567, 3, 32678, 31967, 2, 32333, 32456, 0 };
const size_t N = sizeof( a ) / sizeof( *a );
const size_t M = 3;
for ( size_t i = 0; i < N; i++ )
{
std::cout << std::setw( 5 ) << a[i] << ' ';
if ( ( i + 1 ) % M == 0 ) std::cout << '\n';
}
std::cout << '\n';
std::qsort( a, N / M, sizeof( int[M] ), cmp );
for ( size_t i = 0; i < N; i++ )
{
std::cout << std::setw( 5 ) << a[i] << ' ';
if ( ( i + 1 ) % M == 0 ) std::cout << '\n';
}
std::cout << '\n';
return 0;
}
Выход программы:
33888 32567 3
32678 31967 2
32333 32456 0
32333 32456 0
32678 31967 2
33888 32567 3
То есть число фактических элементов должно быть кратно 3. В общем случае, если число фактические элементы - это N, тогда вызов qsort
будет выглядеть как
std::qsort( a, N / 3, sizeof( int[3] ), cmp );
при условии, что в массиве есть 3 "столбца".
Что касается вашего комментария
Спасибо. Можете ли вы проверить этот массив a [] = {32678,32567,3,32678,32567,2,32678,32456,0,32567,32678,0,32067,32078,1}. Ваш код разрушается, когда я увеличиваю размер массива. Если он работает с любым размером, то будет принят ответ.
, тогда вот вам.
#include <iostream>
#include <iomanip>
#include <cstdlib>
int cmp( const void *a, const void *b )
{
const int *p1 = ( const int * )a;
const int *p2 = ( const int * )b;
return ( p2[2] < p1[2] ) - ( p1[2] < p2[2] );
}
int main()
{
int a[] =
{
32678, 32567, 3,
32678, 32567, 2,
32678, 32456, 0,
32567, 32678, 0,
32067, 32078, 1
};
const size_t N = sizeof( a ) / sizeof( *a );
const size_t M = 3;
for ( size_t i = 0; i < N; i++ )
{
std::cout << std::setw( 5 ) << a[i] << ' ';
if ( ( i + 1 ) % M == 0 ) std::cout << '\n';
}
std::cout << '\n';
std::qsort( a, N / M, sizeof( int[M] ), cmp );
for ( size_t i = 0; i < N; i++ )
{
std::cout << std::setw( 5 ) << a[i] << ' ';
if ( ( i + 1 ) % M == 0 ) std::cout << '\n';
}
std::cout << '\n';
return 0;
}
Программа имеет значение
32678 32567 3
32678 32567 2
32678 32456 0
32567 32678 0
32067 32078 1
32678 32456 0
32567 32678 0
32067 32078 1
32678 32567 2
32678 32567 3