1. 快速排序

  • 步骤
  • 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 重点掌握的就是快速排序与归并排序的代码思想步骤,这个在笔试的时候几乎不会用到,但是最后面试的时候听说会考到!

快速排序 与 归并排序相关推荐

  1. [problem]快速排序和归并排序

    最近有时间了解下快速排序和归并排序. 开始觉得很难,一直没有啃这块骨头,现在发现理解了并不难. 快排的思路就是指定一个值,然后将小于他的排到其左边,大于他的排到其右边. 1 #include < ...

  2. 【算法】快速排序与归并排序对比

    算法 系列博客 [算法]刷题范围建议 和 代码规范 [算法]复杂度理论 ( 时间复杂度 ) [字符串]最长回文子串 ( 蛮力算法 ) [字符串]最长回文子串 ( 中心线枚举算法 ) [字符串]最长回文 ...

  3. 插入排序、选择排序、快速排序以及归并排序(附Python代码)

    排序算法基本原理以及复杂度等知识点可跳转至该博客了解https://www.cnblogs.com/onepixel/p/7674659.html ,本博客主要对排序算法性能进行对比以及记录对比过程发 ...

  4. 【Java数据结构与算法】第八章 快速排序、归并排序和基数排序

    第八章 快速排序.归并排序和基数排序 文章目录 第八章 快速排序.归并排序和基数排序 一.快速排序 1.基本介绍 2.代码实现 二.归并排序 1.基本介绍 2.代码实现 三.基数排序 1.基本介绍 2 ...

  5. 希尔排序、快速排序、归并排序的实现分析以及时间复杂度

    高级排序 希尔排序 快速排序 归并排序 希尔排序 希尔排序是插入排序的一种,又称"缩小增量排序",是插入排序算法的一种更高效的改进版本. 我在另一篇文章中说插入排序的时候,会有一个 ...

  6. 排序(堆排序,快速排序,归并排序)

    前言:如果内容不全,说明还没复习到,复习时会陆续更新. 三种排序比较 堆排序,快速排序,归并排序平均复杂度都是O(nlogn).其中归并排序时间最稳定(最好最差的时间复杂度差距不大).快速排序平均时间 ...

  7. 重点算法排序之快速排序、归并排序(上篇)

    文章目录 一.排序的概念及常见的排序算法 二.快速排序的思想及代码详解 2.1 快速排序的思想 2.2 挖坑法 2.2.1 挖坑法实现思想 2.2.2 挖坑法举例 2.2.3 挖坑法代码实现 2.3 ...

  8. 排序算法乱炖: 快速排序、归并排序、冒泡排序

    一. 快速排序(属于自顶向下) 1. 快速排序原地版 最好情况的时间复杂度:O(nlogn),logn为递归的层数,n为每层递归中总的时间复杂度. 最差情况的时间复杂度:O(n*n) def quic ...

  9. 直播系统源代码,实现快速排序和归并排序

    直播系统源代码,实现快速排序和归并排序 快排板子: #include <iostream>using namespace std;const int N = 1000010;int q[N ...

最新文章

  1. 第四次作业 孙保平034 李路平029
  2. ArcGis辅助编号(半自动)功能的插件式实现
  3. 基于struts2的登录系统
  4. Android studio | Android studio下APP目录工程结构详解
  5. 用python写名字代码_用python编写一个批量修改文件名的小程序
  6. VTK:图表之InEdgeIterator
  7. python中常用的序列化模块_使用pickle模块对python对象进行序列化
  8. ubuntu下面调整Atom的python运行结果中的字体大小
  9. 分析方法的基础 — 1. 拆分能力,分析师的第一技能
  10. 圈复杂度(Cyclomatic Complexity)-转
  11. ad敷铜后还有部分飞线_眼花缭乱!超级无敌的飞线大法,打造一把超低功耗无线机械键盘...
  12. bigemap软件优势
  13. C语言库函数中的POW函数比自己写的简单幂算法慢多了!
  14. 解决only integer scalar arrays can be converted to a scalar index
  15. 怎么隐藏鼠标箭头_立刻上手,无鼠标高效操作excel指南(一)
  16. java 中的连接超时_【java中处理http连接超时的方法】
  17. PS缩小图层兼如何使用蒙版
  18. 如何在指板上寻找特殊和弦
  19. PPC活动的优化利用Prosper202
  20. 3D-2D三维重建:PnP

热门文章

  1. jdbc连oracle dns报错,近期处理的oracle问题汇总
  2. _Linux学习手册(二)—文件目录类命令
  3. win10用不了php_WIN10用不了
  4. python数据分析-Python数据分析:可视化
  5. python小白从哪来开始-Python爬虫小白入门(一)写在前面
  6. 21天学通python-21天学通Python(第2版)
  7. 零基础python入门-零基础 Python 入门
  8. python能做什么项目-这十个Python实战项目,让你瞬间读懂Python!
  9. 语音识别双十一优惠活动
  10. 【动态规划】完全背包:存钱罐(恰好装满)