您的位置:首页 > 编程语言 > C语言/C++

【算法导论】归并排序,C语言实现

2014-05-16 22:45 375 查看
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语言实现版本,写来自己玩玩。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: