Я написал этот код сортировки слиянием, вдохновленный книгой deitel (она использует классы).
Когда я компилирую код (без ошибок), я получаю вывод несортированного массива, но второй вывод не появляется, как будто он игнорирует эту часть кода.
Программа завершается нормально.
Вот код:
#include <iostream>
using namespace std;
void mergeSort(int*, int);
int main()
{
const int DIM = 20;
int vettore[DIM] = { 5, 10, 45, 214, 2, 14, 65, 87, 30, 21, 1, 24, 97,
35, 64, 82, 14, 32, 98, 2};
for(int i = 0; i < DIM; i++)
cout << vettore[i] << ' ';
cout << endl;
mergeSort(vettore, DIM);
for(int i = 0; i < DIM; i++)
cout << vettore[i] << ' ';
return 0;
}
void sortSubVector(int*, int, int, int); //prototipo
void mergeSort(int* vec, int dim)
{
sortSubVector(vec, dim, 0, dim-1);
}
void merge(int*, int, int, int, int, int); //prototipo
void sortSubVector(int* vec, int dim, int low, int high)
{
if((high - low) >= 1 )
{
int middle1 = (high - low) / 2;
int middle2 = middle1 + 1;
sortSubVector(vec, dim, low, middle1);
sortSubVector(vec, dim, middle2, high);
merge(vec, dim, low, middle1, middle2, high);
}
}
void merge(int* vec, int dim, int left, int middle1, int middle2, int right)
{
int leftIndex = left;
int rightIndex = middle2;
int tempIndex = left; //indice vettore temporaneo
int tempVector[ dim ]; //qui verranno posizionati gli elementi ordinati
while(leftIndex <= middle1 && rightIndex <= right)
{
if(vec[leftIndex] <= vec[rightIndex])
tempVector[tempIndex++] = vec[leftIndex++];
else
tempVector[tempIndex++] = vec[rightIndex++];
}
/* gli elementi di una metà sono stati tutti posizionati in ordine, ma
mancano gli elementi dell'altra metà */
if(leftIndex == middle2) //la prima metà è stata completata
while(rightIndex <= right)
tempVector[tempIndex++] = vec[rightIndex++];
else //la seconda metà è stata completata
while(leftIndex <= middle1)
tempVector[tempIndex++] = vec[leftIndex++];
/*il vettore temporaneo è pieno e ordinato. Copiamolo nel vettore
originale*/
for(int i = 0; i < dim; i++)
vec[i] = tempVector[i];
}
Где проблема?
Пожалуйста, помогите мне.
Спасибо.