编写一个程序,使用冒泡排序按升序排序二维数组中的整数

时间:2016-09-08 14:03:03

标签: c++ arrays sorting bubble-sort

如问题所示,我需要使用冒泡排序来对二维数组进行排序。这适用于任何N * M阵列。

我知道如果不先尝试任何事情我们就不应该提问。但我的时间表非常紧张,我现在正在学习c ++。我找不到任何带有合适信息的链接来编码。

如果有人可以帮助我,那就太棒了

1 个答案:

答案 0 :(得分:1)

您可以将指针指向二维数组的第一行,指向int,并将数组排序为一维数组。

你在这里

#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>

void bubble_sort( int *a, size_t n )
{
    for ( size_t last /* = n */; not ( n < 2 ); n = last )
    {
        for ( size_t i = last = 1; i < n; i++ )
        {
            if ( a[i] < a[i-1] )
            {
                std::swap( a[i], a[i-1] );
                last = i;
            }
        }
    }
}

int main()
{
    const size_t N = 3;
    const size_t M = 4;

    int a[N][M];

    std::srand( ( unsigned int )std::time( nullptr ) );

    for ( size_t i = 0; i < N; i++ )
    {
        for ( size_t j = 0; j < M; j++ ) a[i][j] = std::rand() % ( M * N );
    }

    for ( size_t i = 0; i < N; i++ )
    {
        for ( size_t j = 0; j < M; j++ ) 
        {
            std::cout << std::setw( 2 ) << a[i][j] << ' ';
        }
        std::cout << std::endl;
    }

    std::cout << std::endl;

    bubble_sort( reinterpret_cast<int *>( a ), N * M );

    for ( size_t i = 0; i < N; i++ )
    {
        for ( size_t j = 0; j < M; j++ ) 
        {
            std::cout << std::setw( 2 ) << a[i][j] << ' ';
        }
        std::cout << std::endl;
    }

    return 0;
}

程序输出可能看起来像

 7  3  8  7 
 6  8  5  0 
10  9  9  3 

 0  3  3  5 
 6  7  7  8 
 8  9  9 10 

另一种方法是将函数bubble_sort编写为模板函数。在这种情况下,它可以看起来如下所示,如下面的示范程序所示。

#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>

template <typename T, size_t N, size_t M>
void bubble_sort( T ( &a )[N][M] )
{
    for ( size_t n = N * M, last /* = n */; not ( n < 2 ); n = last )
    {
        for ( size_t i = last = 1; i < n; i++ )
        {
            if ( a[i / M][i % M] < a[( i - 1 ) / M][( i - 1 ) % M] )
            {
                std::swap( a[i / M][i % M], a[( i - 1 ) / M][( i - 1 ) % M] );
                last = i;
            }
        }
    }
}


int main()
{
    const size_t N = 3;
    const size_t M = 4;

    int a[N][M];

    std::srand( ( unsigned int )std::time( nullptr ) );

    for ( size_t i = 0; i < N; i++ )
    {
        for ( size_t j = 0; j < M; j++ ) a[i][j] = std::rand() % ( M * N );
    }

    for ( size_t i = 0; i < N; i++ )
    {
        for ( size_t j = 0; j < M; j++ ) 
        {
            std::cout << std::setw( 2 ) << a[i][j] << ' ';
        }
        std::cout << std::endl;
    }

    std::cout << std::endl;

    bubble_sort( a );

    for ( size_t i = 0; i < N; i++ )
    {
        for ( size_t j = 0; j < M; j++ ) 
        {
            std::cout << std::setw( 2 ) << a[i][j] << ' ';
        }
        std::cout << std::endl;
    }

    return 0;
}