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

[C++]Merge Sort, kilka ostatnich wartości nie jest sortowanych

Ostatnio zmodyfikowano 2016-10-24 00:09
Autor Wiadomość
grzekuu
Temat założony przez niniejszego użytkownika
[C++]Merge Sort, kilka ostatnich wartości nie jest sortowanych
» 2016-10-24 00:09:00
Witam, mam problem z sortowaniem poprzez scalanie. Otóż po kompilacji programu ostatnie kilka liczb nie jest sortowanych tylko przekopiowane są poprzednie liczby.

C/C++
#include <iostream>
#include <string>
#include <time.h>
//_getch()
#include <conio.h>
using namespace std;
void merge( int arrayLeft[], int arrayRight[], int mergeArray[], int sizeLeft, int sizeRight )
{
    int i = 0;
    int j = 0;
    int k = 0;
    while( i < sizeLeft && j < sizeRight )
    {
        if( arrayLeft[ i ] == arrayRight[ j ] )
        {
            mergeArray[ k ] = arrayLeft[ i ];
            i++;
            k++;
            mergeArray[ k ] = arrayRight[ j ];
            j++;
            k++;
        }
        if( arrayLeft[ i ] < arrayRight[ j ] )
        {
            mergeArray[ k ] = arrayLeft[ i ];
            i++;
            k++;
        }
        if( arrayRight[ j ] < arrayLeft[ i ] )
        {
            mergeArray[ k ] = arrayRight[ j ];
            j++;
            k++;
        }
    }
    while( i < sizeLeft )
    {
        mergeArray[ k ] = arrayLeft[ i ];
        i++;
    }
   
    while( j < sizeRight )
    {
        mergeArray[ k ] = arrayRight[ j ];
        j++;
    }
}


void mergeSort( int mergeArray[], int arraySize )
{
   
    if( arraySize < 2 )
         return;
   
    int midPosition = arraySize / 2;
    int * arrayLeft = new int[ midPosition ];
    int * arrayRight = new int[ arraySize - midPosition ];
   
    for( int i = 0; i < midPosition; i++ )
         arrayLeft[ i ] = mergeArray[ i ];
   
    int sizeLeft = midPosition;
   
    for( int i = midPosition; i < arraySize; i++ )
         arrayRight[ i - midPosition ] = mergeArray[ i ];
   
    int sizeRight = arraySize - midPosition;
   
    mergeSort( arrayLeft, sizeLeft );
    mergeSort( arrayRight, sizeRight );
    merge( arrayLeft, arrayRight, mergeArray, sizeLeft, sizeRight );
}


//merge sorting
int main()
{
    srand( time( NULL ) );
    int mergeSortArray[ 20 ];
    for( int i = 0; i < 20; i++ )
         mergeSortArray[ i ] = rand() % 100 + 1;
   
    int arraySize = sizeof( mergeSortArray ) / sizeof( int );
    cout << "Unsorted array: ";
    for( int i = 0; i <= 19; i++ )
    {
        if( i > 0 && i < 19 )
             cout << mergeSortArray[ i ] << ", ";
        else if( i == 0 )
             cout << "[ " << mergeSortArray[ i ] << ", ";
        else if( i == 19 )
             cout << mergeSortArray[ i ] << " ]";
       
    }
    cout << endl << endl;
   
    mergeSort( mergeSortArray, arraySize );
   
    cout << "Sorted array: ";
    for( int i = 0; i <= 19; i++ )
    {
        if( i > 0 && i < 19 )
             cout << mergeSortArray[ i ] << ", ";
        else if( i == 0 )
             cout << "[ " << mergeSortArray[ i ] << ", ";
        else if( i == 19 )
             cout << mergeSortArray[ i ] << " ]";
       
    }
    _getch();
    return 0;
}
P-152843
« 1 »
  Strona 1 z 1