快排法(模版型)与归并法
大部分排序用冒泡可以解决,但是在冒泡排序中双层for循环所有的循环次数不能超过10的8次方,以此运用快排法可较快的解决问题;
以100000个数为例
for(i=1;i<=100000-2;i++)
for(j=1;j<=100000-2-i;j++)
{
.......;
}
共需要循环100000*100000次 所以肯定超时;
找女朋友
Time Limit: 15MS Memory limit: 65536K
题目描述
输入
输出
示例输入
5 1 3 2 5 4
示例输出
5 4 3 2 1
快排法
#include<stdio.h> #include<stdlib.h> #define MAX 10000001 int a[MAX];void px(int l,int r); int qp(int l,int r); int main() { int i,n; scanf("%d",&n); for(i=1;i<=n;i++) { scanf("%d",&a[i]); } px(1,n); for(i=n;i>=1;i--) { printf("%d",a[i]); if(i!=1)printf(" "); else printf("\n"); } return 0; } void px(int l,int r) { if(l>=r)return 0; int mid=qp(l,r); px(l,mid-1); px(mid+1,r); } int qp(int l,int r) { int bj=a[l]; while(l<r) { while(bj<=a[r]&&l<r) { r--; } a[l]=a[r]; while(bj>=a[l]&&l<r) { l++; } a[r]=a[l]; } a[r]=bj; return r; }
#include<stdio.h>
int a[1100001];
int c[1100001];
void hebing(int l,int r,int ll,int rr)
{
int i=l;
int j=ll;
int k=l;
for(i,j,k;i<=r&&j<=rr;)
{
if(a[i]<a[j])
{
c[k]=a[i];
i++;
k++;
}
else
{
c[k]=a[j];
j++;
k++;
}
}
if(i<=r)
for(i;i<=r;i++)c[k++]=a[i];
if(j<=rr)
for(j;j<=rr;j++)c[k++]=a[j];
for(i=l;i<=rr;i++)
a[i]=c[i];
}
void paixu(int l,int r)
{
if(l>=r)return ;
int mid=(l+r)/2;
paixu(l,mid);
paixu(mid+1,r);
hebing(l,mid,mid+1,r);
}
int main()
{
int i;
int n;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
paixu(1,n);
for(i=n;i>=1;i--)
{
printf("%d",a[i]);
if(i!=1)printf(" ");
else printf("\n");
}
return 0;
}
快排法(模版型)与归并法相关推荐
- 数据结构之排序【归并排序和快排的顶级优化和快排的三种原理的实现及分析】 内含动态演示图
文章目录 引言: 1.归并排序(MergeSort) 2.快速排序的优化(顶级优化) 3.快速排序的三种思路的代码实现及分析 4.归并排序和快排第3原理的测试 引言: 刚刚去回顾了一下递归实现的几个小 ...
- c++ 快排优化(三数取中法)
快排优化(三数取中法) 文章目录 快排优化(三数取中法) 前言 一.三数取中法 二.递归思想 三.程序实现过程(代码) 1.取基准数(三数取中) 2.快速排序(递归) 总结 前言 作为刚刚入门c和c+ ...
- 【Java】七大排序(冒泡、选择、插入、快排、归并、堆排、希尔排序)
一.相关归纳总结 1.时间复杂度 O(n^2):冒泡排序,选择排序,插入排序 O(log2n):快速排序,希尔排序,堆排序,归并排序 2.空间复杂度 O(1):插入排序.冒泡排序,选择排序,堆排序,希 ...
- 排序(一)归并、快排、优先队列等(图文具体解释)
排序(一) 0基础排序算法 选择排序 思想:首先,找到数组中最小的那个元素.其次,将它和数组的第一个元素交换位置.再次.在剩下的元素中找到最小的元素.将它与数组的第二个元素交换位置. 如此往复,直到将 ...
- 【数据结构与算法】快排、归并 O(nlogn) 基于比较
冒泡.插入.选择 O(n^2) 基于比较 快排.归并 O(nlogn) 基于比较 计数.基数.桶 O(n) 不基于比较 一.分治思想 1.分治思想:分治,顾明思意,就是分而治之,将一个大问题分解成小的 ...
- 排序(冒泡、选择、插入、希尔、快排、堆排、归并)
冒泡排序 冒泡排序时通过无序区中相邻记录的关键字间的比较和位置的交换,使关键字最小的元素如气泡似的逐步上浮直水面.有序区逐渐扩大,无序区逐渐缩小. 冒泡排序算法的原理如下: 比较相邻的元素.如 ...
- 【排序算法】插入、选择、堆排、快排、归并、计数
一.插入排序 insertSort 1.实现 2.性能分析 3.折半插入排序(了解) 二.希尔排序 ShellSort 1.原理 2.实现 3.性能分析 三.选择排序 selectSort 1.原理 ...
- C++数据结构和算法2 栈 双端/队列 冒泡选择插入归并快排 二三分查找 二叉树 二叉搜索树 贪婪 分治 动态规划
C++数据结构和算法2 栈 双端/队列 冒泡选择插入归并快排 二三分查找 二叉树 二叉搜索树 贪婪 分治 动态规划 博文末尾支持二维码赞赏哦 _ github 章3 Stack栈 和 队列Queue= ...
- 排序(下)---快排、归并
排序(下)-快排.归并 快速排序 采用分治的思想:每次选区一个数作为基准,让整个数据中凡是大于此数的放在此数的右边,小于此数的放在此数的左边,然后进行对此数的两边进行选基准,如上方式的分法,递归下去, ...
最新文章
- Spring Cloud第七篇:高可用的配置中心
- 2021 年了,机器/深度学习还有哪些坑比较好挖?
- 7系列FPGA逻辑单元理解
- 转录组分析_高级转录组分析和R数据可视化
- 现代C++函数式编程
- web_find和web_reg_find的用法和区别
- eclipse实现批量修改文件的编码方式
- 关于delete字符串 需不需要加 [ ]
- 「leetcode」90.子集II【回溯算法】详细图解!
- (大家发表一下看法)微软研发智能系统 可通过电脑24小时监控员工
- MFC:Ribbon界面设计
- 记录:2018年CCF优秀博士学位论文奖信息
- ffmpeg 音频解码二
- 盛邦安全网站监控预警平台化繁为简 ——网站安全从管理向治理的迁移
- 百度搜索引擎 - 搜索关键字排名 API
- 初识AOS --------AOS学习笔记系列
- 507. Perfect Number
- 红米note4x开启root权限
- 大学获奖范文,围绕主题我的大学梦进行阐述
- 机器学习之随机森林(手推公式版)
热门文章
- 高等数学(第七版)同济大学 习题9-7 个人解答
- MES支撑企业进行精细化管理
- APP Inventor,一个能快速做出app的工具。只要会C语言就行,很好的调试单片机工具。基于arduino的蓝牙数据传送在APP显示,室内花园的制作。
- 12C 数据库之坑爹又坑队友的无故链接不上问题处理
- 最小生成树、矩阵树定理、Prufer序列总结
- SonarQube 9.x集成Jenkins生成PDF扫描报告并通过邮件附件的方式发送;
- 手用计算机怎么弄声音,一个吉他手如何在电脑上录音编曲
- 飞凌嵌入式技术帖——i.MX9352的GPIO怎么用?
- linux下系统调用接口,LINUX系统调用
- 1+x的n次方根为什么等于x除以n再加1