快速排序 与 归并排序
快速排序
- 步骤
- 1、确定分界点 x=q[(L+R)>>1]
2、调整区间 把区间划分为两个部分,左边的数<=x,右边的数>=x(最重要的)
3、递归处理左右两部分 - 时间复杂度
- 代码
#include<iostream> using namespace std;const int N = 1e5+10; int q[N]; //快排模板 void quick_sort(int q[],int L,int R) {if(L>=R) return;int i=L-1,j=R+1,x=q[L+R>>1];while(i<j){do i++;while(q[i]<x);do j--;while(q[j]>x);if(i<j) swap(q[i],q[j]);}quick_sort(q,L,j),quick_sort(q,j+1,R); } int main() {int n; cin >> n;for(int i=0;i<n;i++) scanf("%d",&q[i]);quick_sort(q,0,n-1);for(int i=0;i<n;i++) printf("%d ",q[i]);return 0; }
归并排序
- 思想方法基于分治
1、确定分界点 mid = L+R >> 1
2、递归排序左右两边
3、归并 合二为一(双指针算法)每次取得左右两个序列的最小值 - 稳定算法:原序列中数值相同排完序之后相对顺序是不变
- 时间复杂度 O(nlogn)
- 代码
#include<iostream> using namespace std;const int N = 1e5+10; int q[N],tem[N];void merge_sort(int q[],int L,int R) {if(L>=R) return;//当只有一个或者没有//(一)确定分界点int mid=L+R>>1;//(二)递归处理左右两个部分merge_sort(q,L,mid),merge_sort(q,mid+1,R);//(三)归并int k=0,i=L,j=mid+1;//3.1去两者中的较小者拿出来while(i<=mid && j<=R){if(q[i]<=q[j]) tem[k++]=q[i++];else tem[k++]=q[j++];}//3.2当其中一方还没有比完,直接将后面的拿过来while(i<=mid) tem[k++]=q[i++];while(j<=R) tem[k++]=q[j++];for(i=L,j=0;i<=R;i++,j++) q[i]=tem[j];} int main() {int n; cin >> n;for(int i=0;i<n;i++) scanf("%d",&q[i]);merge_sort(q,0,n-1);for(int i=0;i<n;i++) printf("%d ",q[i]);return 0; }
//截止2020-2.6-22:08 重点掌握的就是快速排序与归并排序的代码思想步骤,这个在笔试的时候几乎不会用到,但是最后面试的时候听说会考到!
快速排序 与 归并排序相关推荐
- [problem]快速排序和归并排序
最近有时间了解下快速排序和归并排序. 开始觉得很难,一直没有啃这块骨头,现在发现理解了并不难. 快排的思路就是指定一个值,然后将小于他的排到其左边,大于他的排到其右边. 1 #include < ...
- 【算法】快速排序与归并排序对比
算法 系列博客 [算法]刷题范围建议 和 代码规范 [算法]复杂度理论 ( 时间复杂度 ) [字符串]最长回文子串 ( 蛮力算法 ) [字符串]最长回文子串 ( 中心线枚举算法 ) [字符串]最长回文 ...
- 插入排序、选择排序、快速排序以及归并排序(附Python代码)
排序算法基本原理以及复杂度等知识点可跳转至该博客了解https://www.cnblogs.com/onepixel/p/7674659.html ,本博客主要对排序算法性能进行对比以及记录对比过程发 ...
- 【Java数据结构与算法】第八章 快速排序、归并排序和基数排序
第八章 快速排序.归并排序和基数排序 文章目录 第八章 快速排序.归并排序和基数排序 一.快速排序 1.基本介绍 2.代码实现 二.归并排序 1.基本介绍 2.代码实现 三.基数排序 1.基本介绍 2 ...
- 希尔排序、快速排序、归并排序的实现分析以及时间复杂度
高级排序 希尔排序 快速排序 归并排序 希尔排序 希尔排序是插入排序的一种,又称"缩小增量排序",是插入排序算法的一种更高效的改进版本. 我在另一篇文章中说插入排序的时候,会有一个 ...
- 排序(堆排序,快速排序,归并排序)
前言:如果内容不全,说明还没复习到,复习时会陆续更新. 三种排序比较 堆排序,快速排序,归并排序平均复杂度都是O(nlogn).其中归并排序时间最稳定(最好最差的时间复杂度差距不大).快速排序平均时间 ...
- 重点算法排序之快速排序、归并排序(上篇)
文章目录 一.排序的概念及常见的排序算法 二.快速排序的思想及代码详解 2.1 快速排序的思想 2.2 挖坑法 2.2.1 挖坑法实现思想 2.2.2 挖坑法举例 2.2.3 挖坑法代码实现 2.3 ...
- 排序算法乱炖: 快速排序、归并排序、冒泡排序
一. 快速排序(属于自顶向下) 1. 快速排序原地版 最好情况的时间复杂度:O(nlogn),logn为递归的层数,n为每层递归中总的时间复杂度. 最差情况的时间复杂度:O(n*n) def quic ...
- 直播系统源代码,实现快速排序和归并排序
直播系统源代码,实现快速排序和归并排序 快排板子: #include <iostream>using namespace std;const int N = 1000010;int q[N ...
最新文章
- 第四次作业 孙保平034 李路平029
- ArcGis辅助编号(半自动)功能的插件式实现
- 基于struts2的登录系统
- Android studio | Android studio下APP目录工程结构详解
- 用python写名字代码_用python编写一个批量修改文件名的小程序
- VTK:图表之InEdgeIterator
- python中常用的序列化模块_使用pickle模块对python对象进行序列化
- ubuntu下面调整Atom的python运行结果中的字体大小
- 分析方法的基础 — 1. 拆分能力,分析师的第一技能
- 圈复杂度(Cyclomatic Complexity)-转
- ad敷铜后还有部分飞线_眼花缭乱!超级无敌的飞线大法,打造一把超低功耗无线机械键盘...
- bigemap软件优势
- C语言库函数中的POW函数比自己写的简单幂算法慢多了!
- 解决only integer scalar arrays can be converted to a scalar index
- 怎么隐藏鼠标箭头_立刻上手,无鼠标高效操作excel指南(一)
- java 中的连接超时_【java中处理http连接超时的方法】
- PS缩小图层兼如何使用蒙版
- 如何在指板上寻找特殊和弦
- PPC活动的优化利用Prosper202
- 3D-2D三维重建:PnP