提交记录 125796


用户 题目 状态 得分 用时 内存 语言 代码长度
abc1763613206 1001a. 测测你的排序2 Accepted 100 646.82 us 96 KB C++ 981 B
提交时间 评测时间
2026-10-10 17:58:38 2026-10-10 17:58:40
#include <algorithm>

void mergeSortHelper(unsigned *a, int left, int right, unsigned *temp) {
    if (left >= right) return;
    
    int mid = left + (right - left) / 2;
    
    // 递归划分左右两半
    mergeSortHelper(a, left, mid, temp);
    mergeSortHelper(a, mid + 1, right, temp);
    
    // 合并两个有序子数组
    int i = left;
    int j = mid + 1;
    int k = left;
    
    while (i <= mid && j <= right) {
        if (a[i] <= a[j]) {
            temp[k++] = a[i++];
        } else {
            temp[k++] = a[j++];
        }
    }
    
    // 处理剩余元素
    while (i <= mid) {
        temp[k++] = a[i++];
    }
    while (j <= right) {
        temp[k++] = a[j++];
    }
    
    // 将合并后的结果拷贝回原数组
    for (int p = left; p <= right; ++p) {
        a[p] = temp[p];
    }
}

void sort(unsigned *a, int n) {
    if (n <= 1) return;
    
    // 动态分配一次辅助数组,避免在递归中频繁开辟内存
    unsigned *temp = new unsigned[n];
    
    mergeSortHelper(a, 0, n - 1, temp);
    
    // 释放内存,防止内存泄漏
    delete[] temp;
}

CompilationN/AN/ACompile OKScore: N/A

Testcase #1646.82 us96 KBAcceptedScore: 100


Judge Duck Online | 评测鸭在线
Server Time: 2026-10-13 13:45:29 | Loaded in 1 ms | Server Status
个人娱乐项目,仅供学习交流使用 | 捐赠