明廷盛 嘻嘻😁

归并排序

查看归并段的层数

#include <stdio.h>
#include <math.h>

#define N 10
int arr[N] = {0, 9, 8, 7, 6, 5, 4, 3, 2, 1};
int depth = (int)log2(10-1)+2; // 递归深度计数器

void merge_sort(int l, int r) {
if (r <= l) return;

depth--; // 进入递归时增加深度
int current_depth = depth; // 记录当前深度

int mid = (l + r) >> 1;
merge_sort(l, mid);
merge_sort(mid + 1, r);

int i = l, j = mid + 1;
int len = 0;
int tmp[N];
while (i <= mid && j <= r) {
if (arr[i] < arr[j])
tmp[len++] = arr[i++];
else
tmp[len++] = arr[j++];
}
while (i <= mid) tmp[len++] = arr[i++];
while (j <= r) tmp[len++] = arr[j++];

printf("第%d趟排序区间 [%d, %d]: ", current_depth, l, r);
for (int i = l, j = 0; i <= r; i++, j++) {
arr[i] = tmp[j];
printf("%d ", arr[i]);
}
puts("");

depth++; // 退出递归时减少深度
}

int main() {
// printf("%d", (int)log2(N));
merge_sort(1, 9);
return 0;
}
  • Title:
  • Author: 明廷盛
  • Created at : 2026-02-12 01:17:04
  • Updated at : 2026-02-12 01:17:04
  • Link: https://blog.20040424.xyz/2026/02/12/🏫考研/第一部分 数据结构/17.排序/
  • License: All Rights Reserved © 明廷盛
On this page