怎么做网站移动端,wordpress博客xiu,上海到北京专线物流,wordpress 目录 导航站文章目录 QuestionIdeasCode Question
给定你一个长度为 n 的整数数列。
请你使用归并排序对这个数列按照从小到大进行排序。
并将排好序的数列按顺序输出。
输入格式 输入共两行#xff0c;第一行包含整数 n 。
第二行包含 n 个整数#xff08;所有整数均在 1∼109 范围… 文章目录 QuestionIdeasCode Question
给定你一个长度为 n 的整数数列。
请你使用归并排序对这个数列按照从小到大进行排序。
并将排好序的数列按顺序输出。
输入格式 输入共两行第一行包含整数 n 。
第二行包含 n 个整数所有整数均在 1∼109 范围内表示整个数列。
输出格式 输出共一行包含 n 个整数表示排好序的数列。
数据范围 1≤n≤100000 输入样例 5 3 1 2 4 5 输出样例 1 2 3 4 5
Ideas
Code
// 归并排序步骤
// 1. 选取中间点
// 2. 递归左右区间
// 3. 合并两个区间
#include iostreamusing namespace std;
const int N 1e5 10;
int a[N], tem[N];void merge_sort(int *a, int l, int r)
{if (l r) return;int mid l r 1;merge_sort(a, l, mid), merge_sort(a, mid 1, r);int i l, j mid 1, k 0;while(i mid j r){if (a[i] a[j]) // 稳定tem[k ] a[i ];elsetem[k ] a[j ];}while(i mid){tem[k ] a[i ];}while(j r){tem[k ] a[j ];}for (int i l, j 0; i r; i ){a[i] tem[j ];}
}
int main()
{int n;scanf(%d, n);for (int i 0; i n; i ) scanf(%d, a[i]);merge_sort(a, 0, n - 1);for (int i 0; i n; i ) printf(%d , a[i]);return 0;
}