排序 - 题解
排序
时间限制:C/C++ 1000MS,其他语言 2000MS
内存限制:C/C++ 64MB,其他语言 128MB描述
给定你一个长度为 \(n\) 的整数数列。
请你使用任意排序对这个数列按照从小到大进行排序。
并将排好序的数列按顺序输出。
数据范围 \(1≤n≤100000\)
禁止使用sort
函数输入描述
输入共两行,第一行包含整数 \(n\)。
第二行包含 \(n\) 个整数(所有整数均在 \(0∼10^9\) 范围内),表示整个数列。输出描述
输出格式输出共一行,包含 \(n\) 个整数,表示排好序的数列。
用例输入 1
5 3 1 2 4 5 用例输出 1
1 2 3 4 5
解析
推荐查看 https://acwing.com/solution/content/16777
代码
快排和归并都在里面了
#include<cstdio> #include<algorithm> using namespace std; const int N=1e5+5; int n,a[N]; namespace Sort{ void Quick_Sort(int *a,int L,int R) { if(L>=R) return; int l=L-1,r=R+1,pivot=a[l+r>>1]; while(l<r) { do l++; while(a[l]<pivot); do r--; while(a[r]>pivot); if(l<r) swap(a[l],a[r]); } Quick_Sort(a,L,r),Quick_Sort(a,r+1,R); return; } void _merge(int *a,int l1,int r1, int *b,int l2,int r2, int *c,int l3) { while(l1<=r1&&l2<=r2) { if(a[l1]<=b[l2]) c[l3++]=a[l1++]; else c[l3++]=b[l2++]; } while(l1<=r1) c[l3++]=a[l1++]; while(l2<=r2) c[l3++]=b[l2++]; return; } int merge_sort_tmp[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); // merge(a+L,a+mid+1, a+mid+1,a+R+1, merge_sort_tmp+L); _merge(a,L,mid, a,mid+1,R, merge_sort_tmp,L); for(int i=L;i<=R;i++) a[i]=merge_sort_tmp[i]; return; } } int main() { scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); Sort::Merge_Sort(a,1,n); for(int i=1;i<=n;i++) printf("%d ",a[i]); return 0; }
本文采用 「CC-BY-NC 4.0」 创作共享协议,转载请注明作者及出处,禁止商业使用。
作者:Jerrycyx,原文链接:https://www.cnblogs.com/jerrycyx/p/18331279
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理