Nevím proč mi tento Merge sort funguje, pouze když mu zadám k setřídění počet čísel 2, 4, 8, 32, 64...
Zkoušel jsem si to už několikrát projít se zadanými čísly a chybu nemůžu nikde najít
#include <iostream>
#include <ctime>
using namespace std;
void Merge(int Left[],int L_Lenght,int Right[],int R_Lenght,int Array[])
{
int i=0;
while(L_Lenght>0||R_Lenght>0)
{
if(L_Lenght>0&&R_Lenght>0)
{
if(Left[0]<Right[0])
{
Array[i]=Left[0];cout<<Array[i];cout<<endl<<Array[i]<<endl;
i++;
for(int n=0;n<L_Lenght-1;n++){
Left[n]=Left[n+1];}
L_Lenght--;
}
else
{
Array[i]=Right[0];
i++;
for(int n=0;n<R_Lenght-1;n++){
Right[n]=Right[n+1];}
R_Lenght--;
}
}
else
{
if(L_Lenght>0)
{
Array[i]=Left[0];
i++;
for(int n=0;n<L_Lenght-1;n++){
Left[n]=Left[n+1];}
L_Lenght--;
}
else
{
Array[i]=Right[0];
i++;
for(int n=0;n<R_Lenght-1;n++){
Right[n]=Right[n+1];}
R_Lenght--;
}
}
}
}
void MergeSort(int A[],int Lenght)
{
int Array[Lenght];
int Middle=Lenght/2;
int L_Lenght=Middle;
int R_Lenght=Lenght-Middle;
int Left[L_Lenght];
int Right[R_Lenght];
for(int n=0;n<L_Lenght;n++)
{
Left[n]=A[n];
}
for(int n=R_Lenght,m=0;n<Lenght;n++,m++)
{
Right[m]=A[n];
}
if(L_Lenght>1)
{
MergeSort(Left,L_Lenght);
}
if(R_Lenght>1)
{
MergeSort(Right,R_Lenght);
}
Merge(Left,L_Lenght,Right,R_Lenght,A);
}
int main()
{
// int nmb[3]={4,3,2};
// int nmb[10]={1,8,7,1,1,1,1,3,2,1};
// int nmb[10]={1,5,2,6,7,3,2,1,2,3};
// int nmb[10]={1,2,3,4,5,6,7,8,9,10};
int nmb[3];
srand((unsigned)time(0));
for(int a=0;a<3;a++){
nmb[a] = rand();
cout<<nmb[a]<<" ";}
cout<<endl;
MergeSort(nmb,3);
for(int n=0;n<3;n++)
{
cout<<nmb[n]<<" ";
}
cin.get();cin.get();
return 0;
}
Dík za odpovědi