当前位置:   article > 正文

归并排序(C语言完整代码)_归并排序c语言代码

归并排序c语言代码

 归并排序是建立在归并操作上的一种有效的算法,该算法是采用分治法的一个非常典型的应用,

是一种稳定排序算法

将已有的子序列合并,得到完全有序的的序列;即先使每个子序列有序,再使子序列段间有序。

若将两个有序表合并成一个有序表,成为二路归并

代码实现如下:

  1. #include "stdio.h"
  2. #include "malloc.h"
  3. #include "string.h"
  4. void PrintfArray(int* ar, int left,int right)
  5. {
  6. for (int i = left; i < right; i++)
  7. printf("%d ", ar[i]);
  8. }
  9. void _MergeSort(int* ar, int left, int right,int *tmp)
  10. {
  11. if (left >= right)
  12. return;
  13. int mid = (right + left) / 2;
  14. _MergeSort(ar, left, mid, tmp);
  15. _MergeSort(ar, mid + 1, right, tmp);
  16. int begin1 = left, end1 = mid;
  17. int begin2 = mid + 1, end2 = right;
  18. int k = left;
  19. while (begin1 <= end1 && begin2 <= end2)
  20. {
  21. if (ar[begin1] < ar[begin2])
  22. tmp[k++] = ar[begin1++];
  23. else
  24. tmp[k++] = ar[begin2++];
  25. }
  26. while (begin1 <= end1)
  27. tmp[k++] = ar[begin1++];
  28. while (begin2 <= end2)
  29. tmp[k++] = ar[begin2++];
  30. memcpy(ar + left, tmp + left, sizeof(int)*(right - left + 1));
  31. }
  32. void MergeSort(int* ar, int left, int right)
  33. {
  34. int n = right - left;
  35. int* tmp = (int*)malloc(sizeof(int)*n);
  36. _MergeSort(ar, left, right - 1, tmp);
  37. free(tmp);
  38. tmp = NULL;
  39. }
  40. int main()
  41. {
  42. int ar[] = {13,37,34,78,90,88,12 };
  43. int n = sizeof(ar) / sizeof(ar[0]);
  44. PrintfArray(ar, 0, n);
  45. MergeSort(ar,0,n);
  46. printf("\n");
  47. PrintfArray(ar, 0, n);
  48. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/703468
推荐阅读
相关标签
  

闽ICP备14008679号