I'm trying to sort a deck with merge sort.I have all my code working except merge sort function .
Any help would be really helpful ;)
int temp;
int br = 1;
void push_l(int n);
void push_r(int n);
int pop_l(int &n);
int pop_r(int &n);
struct elem
{
int key;
elem *next;
}*_left = NULL, *_right = NULL;
void push_l(int n)
{
elem *p;
p = _left;
_left = new elem;
_left->key = n;
_left->next = p;
if (right == NULL)
{
_right = _left;
}
}
void push_r(int n)
{
elem *p;
p = _right;
_right = new elem;
_right->key = n;
_right->next = NULL;
if (_left == NULL)
{
_left = _right;
}
else
p->next = _right;
}
int pop_l(int &n)
{
elem *p;
if (_left)
{
n = _left->key;
p = _left;
_left = _left->next;
if (left == NULL)
_right = NULL;
delete p;
return 1;
}
else
return 0;
}
int pop_r(int &n)
{
elem *p;
if (right)
{
n = _right->key;
if (_left == _right)
{
delete _right;
_left = _right = NULL;
}
else
{
p = _left;
while (p->next != _right)
p = p->next;
n = _right->key;
p->next = NULL;
_right = p;
}
return 1;
}
else
return 0;
}
void output(ofstream& ostr, int n)
{
ostr << n << endl;
}
void get(int n)
{
int i, t;
for (i = 1; i<br; i++)
{
pop_l(t);
if (i == n)
{
temp = t;
}
push_r(t);
}
}
void set(int n, int d)
{
int t;
for (int i = 1; i<br; i++)
{
pop_l(t);
if (i == n)
{
t = d;
}
push_r(t);
}
}
void list()
{
cout << "\n Dek:";
for (int i = 1; i<br; i++)
{
get(i);
cout << "\t" << temp;
}
}
int mergesort(int a[], int n)
{
if(n<2) return;
int nleft=n/2, nright=n-nleft;
mergesort(a, nleft);
mergesort(a+nleft, nright);
int *p=new int [n];
merge (a, nleft, a+nleft, nright, p);
for (int i=0; i<n; i++)
a[i]=p[i];
delete []p;
}
void search()
{
mergesort();
int t=0;
for (int i = 1; i<br; i++)
{
get(i);
if (temp % 5 == 0)
t = temp;
}
cout << "\n Max element \7: " << t << endl;
cout << "\n Elements multiples of 5 and less than the maximum multiple of 7: " << endl;
for (int i = 1; i<br; i++)
{
get(i);
if (temp % 7 == 0 && temp<t)
{
cout << "\t" << temp;
}
}
}
int main()
{
int ch, m;
do
{
cout << "\n\n\t\t MENU" << endl;
cout << "\n\t1-Data from fail" << endl;
cout << "\t2-Merge sort" << endl;
cout << "\t3-Elements multiples of 5 and less than the maximum multiple of 7" << endl;
cout << "\t4-save" << endl;
cout << "\t5-Exit" << endl;
cout << "\n\tVie izbrahte:";
cin >> m;
cout << endl;
switch (m)
{
case 1:
{
ifstream ff;
ff.open("deck.txt");
while (ff)
{
ff >> ch;
if (ch == 0) break;
else
{
push_r(ch);
br++;
}
}
list();
break;
}
case 2:
{
mergesort();
list();
break;
}
case 3:
{
search();
break;
}
case 4:
{
ofstream ff("sorted deck.txt");
while (pop_l(ch))
{
output(ff, ch);
}
cout << "\n\t *** File saved! ***" << endl;
}
}
} while (m != 5);
}
int main()
{
int ch, m;
do
{
cout << "\n\n\t\t MENU" << endl;
cout << "\n\t1-Data from fail" << endl;
cout << "\t2-Merge sort" << endl;
cout << "\t3-Elements multiples of 5 and less than the maximum multiple of 7" << endl;
cout << "\t4-save" << endl;
cout << "\t5-Exit" << endl;
cout << "\n\tVie izbrahte:";
cin >> m;
cout << endl;
switch (m)
{
case 1:
{
ifstream ff;
ff.open("deck.txt");
while (ff)
{
ff >> ch;
if (ch == 0) break;
else
{
push_r(ch);
br++;
}
}
list();
break;
}
case 2:
{
mergesort();
list();
break;
}
case 3:
{
search();
break;
}
case 4:
{
ofstream ff("sorted deck.txt");
while (pop_l(ch))
{
output(ff, ch);
}
cout << "\n\t *** File saved! ***" << endl;
}
}
} while (m != 5);
}
int main()
{
int ch, m;
do
{
cout << "\n\n\t\t MENU" << endl;
cout << "\n\t1-Data from fail" << endl;
cout << "\t2-Merge sort" << endl;
cout << "\t3-Elements multiples of 5 and less than the maximum multiple of 7" << endl;
cout << "\t4-save" << endl;
cout << "\t5-Exit" << endl;
cout << "\n\tVie izbrahte:";
cin >> m;
cout << endl;
switch (m)
{
case 1:
{
ifstream ff;
ff.open("deck.txt");
while (ff)
{
ff >> ch;
if (ch == 0) break;
else
{
push_r(ch);
br++;
}
}
list();
break;
}
case 2:
{
mergesort();
list();
break;
}
case 3:
{
search();
break;
}
case 4:
{
ofstream ff("sorted deck.txt");
while (pop_l(ch))
{
output(ff, ch);
}
cout << "\n\t *** File saved! ***" << endl;
}
}
} while (m != 5);