[C++]Merge Sort, kilka ostatnich wartości nie jest sortowanych
Ostatnio zmodyfikowano 2016-10-24 00:09
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. #include <iostream> #include <string> #include <time.h>
#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 ); }
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; }
|
|
« 1 » |