Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Algorytm merge-sort

Ostatnio zmodyfikowano 2017-05-13 10:49
Autor Wiadomość
natofp
Temat założony przez niniejszego użytkownika
Algorytm merge-sort
» 2017-05-12 21:44:24
Witam,

npisalem algorytm sorujacy matoda podzialu i rekurencji, jednak nie sortuje on danych poprawnie. Czy ktos moglby wskazac gdzie jest blad?

Oto program:

C/C++
#include <iostream>
#include <cmath>
#include <cstdlib>
using namespace std;


void mergesort( int A[], int p, int q, int r )
{
    int n1 = q - p + 1;
    int n2 = r - q;
    int L[ n1 + 1 ];
    int R[ n2 + 1 ];
    for( int i = 0; i < n1; i++ )
    {
        L[ i ] = A[ p + i ];
    }
    for( int j = 0; j < n2; j++ )
    {
        R[ j ] = A[ q + j + 1 ];
    }
    L[ n1 + 1 ] =( 1 >> 31 );
    R[ n2 + 1 ] =( 1 >> 31 );
    int i = 0;
    int j = 0;
    for( int k = p; k <= r; k++ )
    {
        if( L[ i ] <= R[ j ] )
        {
            A[ k ] = L[ i ];
            i++;
        }
        else
        {
            A[ k ] = R[ j ];
            j++;
        }
    }
   
   
}
void bigmergegsort( int A[], int p, int r )
{
    if( p < r )
    {
        int q =( p + r ) / 2;
        bigmergegsort( A, p, q );
        bigmergegsort( A, q + 1, r );
        mergesort( A, p, q, r );
    }
}

int main()
{
    int A[ 100 ];
    srand( 1 );
    for( int i = 0; i < 100; i++ )
    {
        A[ i ] = rand() % 100 + 1;
       
    }
    bigmergegsort( A, 0, 99 );
    for( int i = 0; i < 100; i++ )
    {
        cout << A[ i ] << endl;
        _sleep( 50 );
    }
   
   
    return 0;
}
[/i]
P-161024
darko202
» 2017-05-13 10:49:38
w funkcji void mergesort(....)

1. tworzysz tablice pomocnicze 
2. sortujesz w nich dane
3. nie przepisujesz wyniku sortowania np.
C/C++
for( i = 0; i <= koniec - start; i++ )
     tablica[ start + i ] = tab_pom[ i ];

http://www.algorytm.org​/algorytmy-sortowania​/sortowanie-przez-scalanie-mergesort.html
P-161039
« 1 »
  Strona 1 z 1