void merge(int* A , int p , int q , int r)
{
static int counter =0;
printf("%d st int here\n" , counter ++);
/* create two arrays */
int LASize = (q - p + 1);
int RaSize = (r - q + 0);
int *lA = malloc( (LASize ) * sizeof(int));
int *rA = malloc( (RaSize ) * sizeof(int));
/* init two arrays */
int i =0;
for (i = 0 ; i < LASize; i++) {
lA[i] = A[p + i];
//printf("%d -> A[%d] \n" , A[p + i] , i);
}
for (i = 0 ; i < RaSize; i++) {
rA[i] = A[q + 1 + i];
//printf("%d -> A[%d] \n" , A[q + 1 + i] , i);
}
/* do merge */
int k = 0 ;
int j = 0;
for (i = 0 ,k = 0 , j = 0; k < LASize && j < RaSize ; ) {
if(lA[k] <rA[j]){
A[p + i] = lA[k];
printf("%d -> A[%d] \n" , lA[k] , p + i);
k++;
}else{
A[p + i] = rA[j];
printf("%d -> A[%d] \n" , rA[j] , p + i);
j++;
}
i ++;
}
if (k < LASize) {
while (k < LASize) {
A[p + i] = lA[k];
printf("%d -> A[%d] \n" , lA[k] , p +i);
k++;
i++;
}
}
else if(j < RaSize)
{
while (j < RaSize) {
A[p + i] = rA[j];
printf("%d -> A[%d] \n" , rA[j] , p + i);
j++;
i++;
}
}
free(lA);
free(rA);
}
void merge_sort(int* A , int p , int q)
{
if(p < q)
{
int r = (p + q)/2;
merge_sort(A , p , r);
merge_sort(A , r + 1 , q);
merge(A , p , r, q);
}
}
int main(int argc , char**argv)
{
#if 1
int a[] = {2,32,12,34,56,34,23,12,34,56,34,23,12,3,45,63,512,324,334};
merge_sort(a , 0 , sizeof(a)/sizeof(int) - 1);
int i =0;
for (i = 0 ; i < sizeof(a)/sizeof(int) ; i++) {
printf("%d , ",a[i]);
}
#endif
printf("\n");
return 0;
}
归并排序的C语言实现版本,写来自己玩玩。