当前位置:   article > 正文

归并排序算法(C语言实现)_c语言归并排序算法代码

c语言归并排序算法代码

归并排序的步骤:
1.将序列分成左右两部分
2.排序左序列,排序右序列
3.合并两个有序的序列
需要申请额外的空间放临时的有序序列

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<stdlib.h>
  4. void merge(char *str,char *tmpstr,int start,int mid,int end)
  5. {
  6. int i=start,j=mid+1,k=start;
  7. while(i!=mid+1 && j!=end+1)
  8. {
  9. if(str[i] <= str[j])
  10. {
  11. //当左边的元素小于右边的元素,则将左边的元素存放在临时的序列
  12. tmpstr[k++] = str[i++];
  13. }
  14. else
  15. {
  16. //当右边的元素小于左边的元素,则将右边的元素存放在临时的序列
  17. tmpstr[k++] = str[j++];
  18. }
  19. }
  20. //直到左边的序列遍历完成,或者右边的序列遍历完成,剩余的元素,也按照序号存放在临时序列中
  21. while(i != mid+1)
  22. {
  23. tmpstr[k++] = str[i++];
  24. }
  25. while(j != end+1)
  26. {
  27. tmpstr[k++] = str[j++];
  28. }
  29. //临时序列已经时有序的了,原始序列逐个元素代替即可
  30. for(i=start;i<=end;i++)
  31. str[i] = tmpstr[i];
  32. }
  33. void msort(char *str,char *tmpstr,int start,int end)
  34. {
  35. int mid;
  36. if(start < end)
  37. {
  38. mid = start + (end - start)/2;
  39. msort(str,tmpstr,start,mid); //排序左边序列
  40. msort(str,tmpstr,mid+1,end); //排序右边序列
  41. merge(str,tmpstr,start,mid,end);//合并两个有序的序列
  42. }
  43. }
  44. int main(int argc,char *argv[])
  45. {
  46. char str[]="ascdshhdfc";
  47. char *tmpstr = NULL;
  48. tmpstr = malloc(strlen(str)*sizeof(char));
  49. printf("srcstr:%s.\n",str);
  50. msort(str,tmpstr,0,strlen(str)-1);
  51. printf("dststr:%s.\n",str);
  52. free(tmpstr);
  53. }

上述代码执行的结果:

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号