【算法导论】归并排序,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语言实现版本,写来自己玩玩。
相关文章推荐
- 算法导论之插入排序,选择排序,归并排序,冒泡排序,希尔排序,堆排序,快速排序的c语言实现
- 归并排序的C语言实现【严蔚敏+算法导论】
- 算法导论 堆排序 C语言实现
- 算法导论之最大子数组问题 C语言实现
- 《数据结构与算法——C语言实现》学习笔记——归并排序
- C++ 归并排序实现(算法导论)
- 用c语言实现红黑树(依据算法导论上的方法)
- 归并排序的c语言代码--算法导论一致
- 自底向上的归并排序-转自算法C语言实现
- 算法导论——关于快速排序的实现(c语言实现)
- C语言实现排序算法之归并排序详解
- 【算法导论】归并排序实现
- C语言实现快排、归并排序、快排改进算法的递归和非递归算法
- C++ 归并排序实现(算法导论)
- 10个重要的算法C语言实现源代码:拉格朗日,牛顿插值,高斯,龙贝格,牛顿迭代,牛顿-科特斯,雅克比,秦九昭,幂法,高斯塞德尔
- 10个重要的算法C语言实现源代码
- 归并排序(merge sort)算法实现
- 10个重要的算法C语言实现源代码:拉格朗日,牛顿插值,高斯,龙贝格,牛顿迭代,牛顿-科特斯,雅克比,秦九昭,幂法,高斯塞德尔
- 数值计算方法与算法:C语言实现利用Gauss消元法解方程组
- 防脉冲干扰移动平均值法数字滤波器的C语言算法及其实现