[模板][快速排序&归并排序]
不得不说,手写的快排真的好菜。(即使开了随机数...)
快速排序
#include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> using namespace std; inline int read(); ; namespace iNx{ int n; int q[Maxn]; void exchange(int a,int b){ int t=q[a]; q[a]=q[b]; q[b]=t; } void quicksort(int left,int right){ if(left>=right) return ; exchange(left,(rand()%(right-left+))+left); int key=q[left],i=left,j=right; while(i<j){ while(q[j]>=key&&i<j) j--; if(j>i) q[i++]=q[j]; while(q[i]<=key&&i<j) i++; if(i<j) q[j--]=q[i]; } q[i]=key; quicksort(left,i-); quicksort(i+,right); } int main(){ n=read(); int i; ;i<=n;i++) q[i]=read(); quicksort(,n); ;i<=n;i++) printf("%d ",q[i]); puts(""); ; } } int main(){ iNx::main(); ; } inline int read(){ ,ff=; char c=getchar(); '){ ; c=getchar(); } +c-',c=getchar(); return kk*ff; }
归并排序
#include<iostream> #include<cstdio> #include<cstring> using namespace std; inline int read(); ; namespace iNx{ int n,q[Maxn],t[Maxn]; void mergesort(int left,int right){ if(left>=right) return ; ; mergesort(left,mid); mergesort(mid+,right); ,k=left; while(i<=mid&&j<=right){ if(q[i]<=q[j]) t[k++]=q[i++]; else t[k++]=q[j++]; } while(i<=mid) t[k++]=q[i++]; while(j<=right) t[k++]=q[j++]; for(i=left;i<=right;i++) q[i]=t[i]; } int main(){ n=read(); int i; ;i<=n;i++) q[i]=read(); mergesort(,n); ;i<=n;i++) printf("%d ",q[i]); puts(""); } } int main(){ iNx::main(); ; } inline int read(){ ,ff=; char c=getchar(); '){ ; c=getchar(); } +c-',c=getchar(); return kk*ff; }
可以到洛谷上测试:P1177 【模板】快速排序
附上两种代码测评结果(此题时间限制3s):
快速排序:
归并排序:
(天天进步一点点hhh。)
[模板][快速排序&归并排序]的更多相关文章
- Luogu 1177 - 【模板】快速排序 - [快速排序][归并排序][无旋Treap]
题目链接:https://www.luogu.org/problemnew/show/P1177 题意:输入 $n$ 以及后续 $n$ 个整数,让你将这 $n$ 个整数从小到大排序输出. 归并排序(用 ...
- 快速排序&&归并排序
快速排序 快速排序采用的是分治的策略,算法的具体实现过程是 1.确定一个数X(一般是选中间值X=q[l+r>>1]) 2.利用指针i,j,将数组中比X小的数放在一边,比X大的数放在另一边 ...
- c语言 快速排序---归并排序----堆排序
//快速排序: #include <stdio.h> #define MAX 500000 int s[MAX]; void Q_Sort(int start,int end) { int ...
- noi.ac #32 快速排序归并排序应用
\(des\) 给定长度为 \(n\) 的数组,要求翻转一段区间 \([l, r]\) 使其升序排列. 要求 \(\sum r - l + 1 <= 2e7\) \(sol\) 考虑快速排序,每 ...
- 9, java数据结构和算法: 直接插入排序, 希尔排序, 简单选择排序, 堆排序, 冒泡排序,快速排序, 归并排序, 基数排序的分析和代码实现
内部排序: 就是使用内存空间来排序 外部排序: 就是数据量很大,需要借助外部存储(文件)来排序. 直接上代码: package com.lvcai; public class Sort { publi ...
- 洛谷【P1177】【模板】归并排序
题目传送门:https://www.luogu.org/problemnew/show/P1177 归并排序: 1.先将\(a\)数组的区间\([l,mid],[mid+1,r]\)排成有序的. 2. ...
- 快速排序 O(n logn) 堆排序 O(n logn) 归并排序 O(n logn)
NB三人组 快速排序 思路" 取一个元素P (第一个元素), 使元素归位 列表被P 分成两部分,左边都比P小,右边比P大; 递归完成排序. 问题 如果是已经排序好的 倒叙 列表 则会 递归深 ...
- 快速排序 Vs. 归并排序 Vs. 堆排序——谁才是最强的排序算法
知乎上有一个问题是这样的: 堆排序是渐进最优的比较排序算法,达到了O(nlgn)这一下界,而快排有一定的可能性会产生最坏划分,时间复杂度可能为O(n^2),那为什么快排在实际使用中通常优于堆排序? 昨 ...
- 归并排序 & 计数排序 & 基数排序 & 冒泡排序 & 选择排序 ----> 内部排序性能比较
2.3 归并排序 接口定义: int merge(void* data, int esize, int lpos, int dpos, int rpos, int (*compare)(const v ...
随机推荐
- xmake从入门到精通9:交叉编译详解
xmake是一个基于Lua的轻量级现代化c/c 的项目构建工具,主要特点是:语法简单易上手,提供更加可读的项目维护,实现跨平台行为一致的构建体验. 除了win, linux, macOS平台,以及an ...
- 小记---------Elasticsear搭建
Elasticsear搭建 创建用户: useradd elasticsearch passwd elasticsearch 1.解压 tar -zxvf elasticsearch-5.5.2. ...
- iOS模拟器发生了崩溃,去哪找Crash Log
iOS模拟器发生了崩溃,可以在如下地方找到崩溃日志: ~/Library/Logs/DiagnosticReports/
- 让图片img标签上下左右居中
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- call apply bind sleep
1.自己实现一个call 1)利用对象的方式的形式改变this指针 funcion add; add.call(temObj) 只需要 在temObj对象临时添加一个方法即可 Function.pro ...
- IDEA debug模式鼠标悬停提示变量值
- linux命令详解——tee
tee 重定向输出到多个文件 在执行Linux命令时,我们既想把输出保存到文件中,又想在屏幕上看到输出内容,就可以使用tee命令 要注意的是:在使用管道线时,前一个命令的标准错误输出不会被tee读取. ...
- JS基础知识二
JS控制语句 switch 语句用于基于不同的条件来执行不同的动作 <script> function myFunction(){ var x; var d=new Date().getD ...
- CentOS 7.4 下安装部署Nagios监控系统详细攻略(三)
Nagios是一个流行的电脑系统和网络监控程序,它检测主机和服务,当异常发生和解除时能提醒用户.它是基于GPLv2开发的开源软件,可免费获得及使用. nagios工作原理 nagios的功能是监控服务 ...
- CreateRemoteThread
CreateRemoteThread是一个Windows API函数,它能够创建一个在其它进程地址空间中运行的线程(也称:创建远程线程)..