Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void MergeSortOneTab( int* pTab, int l, int r)
- {
- if( l < r )
- {
- int m = ( l + r ) / 2;
- MergeSortOneTab( pTab, l, m );
- MergeSortOneTab( pTab, m + 1, r );
- MergeOne( pTab, l, r);
- }
- }
- void MergeOne( int* pTab, int start, int end)
- {
- int size = end - start + 1;
- int* temp = NULL; //tworze tablice tymczasowa
- CreateT( &temp, size );
- //kopiuje dane do tab tymczasowej
- for( int v = 0; v < size; v++ )
- *( temp + v ) = *( pTab + start + v );
- int i = 0;
- int j = ( size + 1 ) / 2; //==m
- int k = start; //indeks tablicy do ktorej bedziemy wczytywac posortowane rosnaco dwa podciagi
- while(( i <= ( size + 1 ) / 2 ) && ( j < size )) // przenoszenie posortowanych danych z tablicy pomocniczej do tablicy glownej
- {
- //if(*( temp + i ) <= *( temp + j ))
- if (temp[i] <= temp[j])
- {
- // *( pTab + k++ ) = *( temp + i++ );
- pTab[k++] = temp[i++];
- }
- else
- //*( pTab + k++ ) = *( temp + j++ );
- pTab[k++] = temp[j++];
- }
- while (i < (size + 1) / 2)
- //*( pTab + k++ ) = *( temp + i++ );
- pTab[k++] = temp[i++];
- while (j < size)
- //*( pTab + k++ ) = *( temp + j++ );
- pTab[k++] = temp[j++];
- free( temp );
- }
- //==========================================
- void MergeSortTab(int* tab, int l, int r, int nSize, int* temp)
- {
- if (l < r) {
- int m = (l + r) / 2;
- MergeSortTab(tab, l, m, nSize, temp);
- MergeSortTab(tab, m + 1, r, nSize, temp);
- Merge(tab, l, m, r, nSize, temp);
- }
- }
- void Merge(int* tab, int l, int m, int r, int nSize, int* temp)
- {
- memcpy(temp + l, tab + l, sizeof(int) * (r - l + 1)); // kopiujemy zawartość
- int i = l; // początek pierwszego posortowanego ciągu
- int j = m + 1; // początek drugiego posortowanego ciągu
- int k = l; // indeks tablicy do którego bedziemy wczytywać posrtowane rosnąco dwa podciągu
- while (i <= m && j <= r) // łączenie dwóch posortowanych podciągów
- {
- if (temp[i] <= temp[j])
- {
- tab[k] = temp[i++];
- }
- else
- {
- tab[k] = temp[j++];
- }
- k++;
- }
- memcpy(tab + k, temp + i, (m - i + 1) * sizeof(int)); // dokopiowywanie reszty
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement