题解:学而思编程 快速排序

张开发
2026/6/11 19:30:02 15 分钟阅读

分享文章

题解:学而思编程 快速排序
本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。欢迎大家订阅我的专栏算法题解C与Python实现附上汇总贴算法竞赛备考冲刺必刷题C | 汇总【题目来源】学而思编程快速排序【题目描述】利用快速排序算法将读入的N NN个数从小到大排序后输出。快速排序是信息学竞赛的必备算法之一。对于快速排序不是很了解的同学可以自行上网查询相关资料掌握后独立完成。C 选手请不要试图使用STL虽然你可以使用sort一遍过但是你并没有掌握快速排序算法的精髓。【输入】第1 11行为一个正整数N NN第2 22行包含N NN个空格隔开的正整数a i a_iai​为你需要进行排序的数数据保证了a i a_iai​不超过10 9 10^9109。【输出】将给定的N NN个数从小到大输出数之间空格隔开行末换行且无空格。【输入样例】5 4 2 4 5 1【输出样例】1 2 4 4 5【算法标签】#快速排序【代码详解】#includebits/stdc.husingnamespacestd;constintN100005;intn;// 数组长度inta[N];// 存储待排序的数组// 快速排序函数voidqsort(intl,intr){// 对区间[l, r]进行快速排序intxa[(lr)/2];// 选择中间的元素作为基准值intil,jr;// i从左向右扫描j从右向左扫描while(ij){// 在x左边从左到右找到第一个x的数字a[i]while(a[i]x)i;// 在x右边从右到左找到第一个x的数字a[j]while(a[j]x)j--;// 如果找到的两个元素的下标没有交错交换这两个元素并移动下标if(ij){swap(a[i],a[j]);// 交换a[i]和a[j]i;// 移动左指针j--;// 移动右指针}}// 递归地对左半部分进行快速排序if(lj)qsort(l,j);// 递归地对右半部分进行快速排序if(ir)qsort(i,r);}intmain(){cinn;// 读取数组长度// 读取数组元素for(inti1;in;i){cina[i];}qsort(1,n);// 调用快速排序函数// 输出排序后的数组for(inti1;in;i){couta[i] ;}coutendl;return0;}【运行结果】5 4 2 4 5 1 1 2 4 4 5

更多文章