归并排序(MergeSort)(防止标题重复)

我会带着你远行 2022-12-27 07:58 241阅读 0赞

归并排序(MergeSort)
1 归并排序原理
分解成最小的记录块(长度为0或1),必须要排序,就是有序块
然后再归并
2 归并排序算法的实现

  1. //归并的实现
  2. //有序子序列R[low...mid]与R[mid + 1...high]归并到S[low...high]
  3. void Merge(Rcd R[], int low, int mid, int high, Rcd &S[])
  4. {
  5. P_left = low;
  6. P_right = mid + 1;
  7. P_result = low;
  8. while (P_left <= mid && P_right <= high)
  9. {
  10. if (R[P_left] <R[P_right])
  11. {
  12. S[P_result] = R[P_left];
  13. P_result++;
  14. P_left++;
  15. }
  16. else
  17. {
  18. S[P_result] = R[P_right];
  19. P_result++;
  20. P_right++;
  21. }
  22. }
  23. while (P_left <= mid)
  24. {
  25. S[P_result] = R[P_left];
  26. P_result++;
  27. P_left++;
  28. }
  29. while (P_right <= high)
  30. {
  31. S[P_result] = R[P_right];
  32. P_result++;
  33. P_right++;
  34. }
  35. }
  36. //归并排序的对外封装
  37. void MergeSort(Rcd R[], int low, int high, Rcd &T[])
  38. {
  39. //只有一个结点的序列
  40. if (low == high) T[low] = R[low];
  41. else
  42. {
  43. mid = (low + high)/2;
  44. MergeSort(R, low, mid, S);
  45. MergeSort(R, mid + 1, high, S);
  46. Merge(S, low, mid, high, T);
  47. }
  48. }

3 总结与推广

发表评论

表情:
评论列表 (有 0 条评论,241人围观)

还没有评论,来说两句吧...

相关阅读