题解 | 排序

排序

https://www.nowcoder.com/practice/508f66c6c93d4191ab25151066cb50ef

#include <stdio.h>
#define dataLen 100

int merge(int* data, int start, int mid, int end, int n) {

    int result[100];
    int k = 0;
    int i = start;
    int j = mid + 1;
    // 升序排序
    while (i <= mid && j <= end) {
        if (data[i] > data[j]) {
            result[k++] = data[j++];
        } else {
            result[k++] = data[i++];
        }
    }

    // 处理剩余的部分
    if (i == mid + 1) {
        while (j <= end) {
            result[k++] = data[j++];
        }
    }
    if (j == end + 1) {
        while (i <= mid) {
            result[k++] = data[i++];
        }
    }

    // 将这些元素复制回原数组arr的start到end位置,完成合并过程
    for (j=0, i=start; j<k; i++, j++) {
        data[i] = result[j];
    }
    return 0;
}

int mergeSort(int* data, int start, int end, int n) {
    if (start >= end)
        return 0;

    int mid = (start + end) / 2;
    // 分
    mergeSort(data, start, mid, n);
    mergeSort(data, mid+1, end, n);
    // 合并
    merge(data, start, mid, end, n);
    return 0;
}

int main() {
    int n;
    while (scanf("%d", &n) != EOF) {
        int data[dataLen];
        for (int i = 0; i < n; i++) {
            scanf("%d", &data[i]);
        }

        // 归并排序
        mergeSort(data, 0, n - 1, n);
        // 输出结果
        for (int i = 0; i < n; i++) {
            printf("%d ", data[i]);
        }

    }
    return 0;
}

全部评论

相关推荐

Java抽象带篮子:投java岗就写java,真别写c,c++,python,css了,进去让你搞这些你又不乐意
点赞 评论 收藏
分享
10-10 16:30
济宁学院 Java
一表renzha:面试官:蓝桥杯三等奖?你多去两次厕所都能拿二等吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务