快排法(模版型)与归并法
大部分排序用冒泡可以解决,但是在冒泡排序中双层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= ...
- 排序(下)---快排、归并
排序(下)-快排.归并 快速排序 采用分治的思想:每次选区一个数作为基准,让整个数据中凡是大于此数的放在此数的右边,小于此数的放在此数的左边,然后进行对此数的两边进行选基准,如上方式的分法,递归下去, ...
最新文章
- 通过mtd读写flash_关于如何在kernel起来之后通过直接dd读写nand flash分区来更新zImage的mtd问题...
- springboot页面乱码问题
- MySQL 修改用户
- C语言 找出任意两整数之间的素数以及他们的和
- numpy.repeat作用,语法,参数解读以及实例
- 无法获取计算机名,Spring Cloud常见问题之:无法注册主机名
- 代理模式vs适配器模式vs外观模式
- PHP连接MongoDB
- RVA和文件偏移的转换
- excel在线_如何设计有趣又实用的在线课程
- dnf时装补丁教程_DNF时装补丁修改教程
- 饥荒联机版服务器控制台本地和在线,《饥荒》多人联机版控制台开启方法详解...
- 山东科技大学计算机控制系统期末考试试卷,山东科技大学 计算机操作系统试题b...
- 加州房价预测项目详细笔记(Regression)——(1)研究数据获得灵感
- 罗尔定理、拉格朗日中值定理和柯西中值定理和用他们证明不等式、
- (蓝桥杯)数字三角形。。(最简单的dp题)
- 中国十大垃圾软件网站
- python requests ssl 证书问题
- HTML-6.表单学习—如何做一个注册(登录)网页
- 【C++复习总结回顾】—— 【一】基础知识+字符串/string类