zoukankan      html  css  js  c++  java
  • 归并排序

    1. 归并排序

    给定你一个长度为n的整数数列。

    请你使用归并排序对这个数列按照从小到大进行排序。

    并将排好序的数列按顺序输出。
    输入格式

    输入共两行,第一行包含整数 n。

    第二行包含 n 个整数(所有整数均在1~109

    范围内),表示整个数列。
    输出格式

    输出共一行,包含 n 个整数,表示排好序的数列。
    数据范围

    1≤n≤100000

    输入样例:

    5
    3 1 2 4 5

    输出样例:

    1 2 3 4 5

    代码

    #include<bits/stdc++.h>
    using namespace std;
    const int maxsize = 1e5 + 5;
    int a[maxsize], temp[maxsize];
    void merge_sort(int l, int r) {
        if(l >= r) return;
        int mid = l + r >> 1;
        merge_sort(l, mid);
        merge_sort(mid + 1, r);
        int i = l, j = mid + 1, cnt = 0;
        while(i <= mid && j <= r) { // 注意传入的值是 0 - n - 1是可以相等的
            if(a[i] < a[j]) temp[cnt++] = a[i++];
            else temp[cnt++] = a[j++];
        }
        while(i <= mid) temp[cnt++] = a[i++]; 
        while(j <= r)   temp[cnt++] = a[j++];
        for(i = l, j = 0; i <= r; i++, j++) a[i] = temp[j]; // 注意是i = l , emmm
    }
    int main() {
        int n;
        scanf("%d", &n);
        for(int i = 0; i < n; i++) {
            scanf("%d", &a[i]);
        }
        merge_sort(0, n -1);
        for(int i = 0; i < n; i++) {
            printf("%s%d", i == 0 ? "" : " ", a[i]);
        } 
        return 0;
    }
    
  • 相关阅读:
    JAVA多线程与并发学习总结
    Java虚拟机类加载机制
    2013网易校园招聘笔试题
    人人网面试题
    2010人人网校园招聘笔试题
    2011人人网校园招聘笔试题
    2012人人网校园招聘笔试题
    2013人人网校园招聘笔试题
    海量数据查找唯一数据问题
    Hulu面试题
  • 原文地址:https://www.cnblogs.com/csyxdh/p/12521282.html
Copyright © 2011-2022 走看看