Fusion de tri de la mise en œuvre

Je suis novice en c++ et a essayé de développer un code pour la fusion et le tri. Je l'ai testé avec un exemple de tableau de taille 5 mais la réponse donnée par le code n'est pas bon. Je ne peux pas comprendre ce qui ne va pas. Voici mon code:

#include <iostream>
#include <cstring>
#include <sstream>
#include <fstream>
#include <iomanip>
using namespace std;
void merge(int, int, int, int*);
void merge_sort(int low, int high, int* p){
int pivot;
static int i(1);
if (high>low)
{
cout << "calling merge_sort: "<<i<<endl; i++;
pivot = low + ((high - low)/2);
cout << pivot << endl;
merge_sort(low, pivot, p);
merge_sort(pivot+1, high, p);
merge(low, pivot, high, p);
}
}
void merge(int l, int pi, int h,int* arr)
{
int start = l;
int mid = pi+1;
while((start<=pi)&&(mid <=h)){
if (arr[start] > arr[mid])
{
int temp = arr[mid];
arr[mid] = arr[start];
arr[start] = temp;
mid++;
}
else
start++;
}
}
int main() 
{
int a[] = {2, 42, 3, 7, 1};
merge_sort(0, 4, a);
for (int i = 0; i<=4 ; i++)
cout << a[i] << endl;
return (0);
}

La sortie est comme suit:

calling merge_sort: 1
2
calling merge_sort: 2
1
calling merge_sort: 3
0
calling merge_sort: 4
3
1
3
7
2
42

J'ai vu certains codes de fusion de tri de la mise en œuvre sur stackoverflow mais ils utilisent un autre tableau temporaire, que je veux éviter.

Toute aide est grandement appréciée dans le tri de ce problème.

Si vous avez besoin d'une information sur les lieu de fusion et de mise en œuvre - stackoverflow.com/questions/2571049/...

OriginalL'auteur akash_c | 2013-08-09