算法竞赛百日——快速排序 - 分治

news2024/11/26 17:39:01

本文已收录于专栏

🌲《百日算法竞赛》🌲

目录

本文已收录于专栏

🌲《百日算法竞赛》🌲

快速排序

 解题思路

思路分析:

模拟:

AC_Code

二分查找

用二分法求 平方根

二分模板

快速排序

给定你一个长度为 n n n 的整数数列。

请你使用快速排序对这个数列按照从小到大进行排序。

并将排好序的数列按顺序输出。

输入格式

输入共两行,第一行包含整数 n n n。

第二行包含 n n n 个整数(所有整数均在 1 ∼ 1 0 9 1∼10^9 1∼109 范围内),表示整个数列。

输出格式

输出共一行,包含 n n n 个整数,表示排好序的数列。

数据范围

1 ≤ n ≤ 100000 1≤n≤100000 1≤n≤100000

输入样例:

5
3 1 2 4 5

输出样例:

1 2 3 4 5

 解题思路

思路分析:

每一次找一个分界点x,小于它的数放到x左边,大于x的数放到x右边,完成之后可以得到两个有序数组,然后再递归,直至所有元素都完成排序。

模拟:

假设对6,1,2,7,9,3,4,5,10,8这10个数进行排序:

本次模拟的分界点是数组的第一个元素。

1、从后向前扫描,i去向右找第一个大于基准6的数字,j向左查找第一个小于基准6数字:

图片来自cnblogs糖豆爸爸

这里注意,i先走,如果遇到比x大的,停下来,然后j再往左走,遇到比x小的停下来,再交换i,j,之后i,j都中间移动继续上述操作。

2、找到7和5,交换7和5

3、继续前进,找到9和4,然后交换

4、i>=j,交换6和3

交换之后:3,1,2,5,4,6,9,7,10,8 一趟排序结束。

划分的两堆数据,继续进行递归操作,完成所有数据排序。

AC_Code

#include<iostream>
using namespace std;

const int N = 1e6 +10;//1000010

int n;
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(){
    scanf("%d",&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;
}

注意:这里面的x 不能取到q[r],否则会死循环

二分查找

用二分法求 平方根

//浮点数二分
#include<iostream>
using namespace std;
int main()
{
    double x;
    cin>>x;
    
    double l = 0,r = x;
    
    while(r - l > 1e-6)
    {
        double mid = (l+r)/2;
        if(mid * mid >= x) r = mid;
        else l = mid;
    }
    
    printf("%.3f",l);
    return 0;
}
#include<iostream>
using namespace std;
int main()
{
    double x;
    cin>>x;
    
    double l = 0,r = x;
    
    //while(r - l > 1e-5)//要求保留三位有效数字--->精度到1e-5就可以了,多出两位
    for(int i = 0;i < 100;i++)//直接迭代100次
    {
        double mid = (l+r)/2;
        if(mid * mid >= x) r = mid;
        else l = mid;
    }
    
    printf("%.3f",l);
    return 0;
}

二分模板

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/153747.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

纯前端导出Excel并修改样式

之前写过一篇前端导出&#xff1a;Vue实现导出功能&#xff08;无后端配合&#xff09; &#xff0c;但是当时没考虑到样式的问题&#xff0c;后来要求导出的Excel单元格的样式也需要调整&#xff0c;尤其是宽度&#xff0c;第一想到的就是xlsx-style这个包&#xff0c;之前也没…

Python基础篇---生成器和模块

生成器对象 生成器对象其本质是自定义迭代器&#xff0c;就是需要我们自己写代码产生的迭代器。 生成器对象也是节省存储空间的 特性与迭代器对象一致。 def index():print(第一次输出)yield 1print(第二次输出)yield 2 1 2 3 4 5 6 7 8 9 10 当我们没有加括号调用之前&…

学习JavaScript,有哪些好的博客或者网站推荐?

前言 特意制作了一个Js整体的学习路线以及相关知识点博客讲解以及各类网站学习的资源整合&#xff0c;希望对你有帮助哈~ 废话少说&#xff0c;我们直接进入正题&#xff0c;先放上路线导图&#xff1a; 部分重要知识点 基础性知识 声明变量 null 和 undefined 详解JavaS…

code warrior IDE win10 64位安装保姆级教程

以下安装步骤是在win10 64位系统运行程序默认安装在C盘第1步&#xff1a;第2步&#xff1a;将PE_Plugin.dll文件复制到com文件夹中&#xff0c;路径如下&#xff1a;C:\Program Files(x86)\Freescale\CodeWarrior for Microcontrollers V6.3\bin\plugins\com第3步&#xff1a;以…

Blender里的三种绑定 (三)骨骼

文章目录Blender里的三种绑定.骨骼.骨骼基础.骨骼的父子关系.挤出骨骼.细分骨骼.骨骼分层.骨骼分组.骨骼约束.骨骼被遮挡.对称骨骼.为模型绑定骨骼.刚体物体&#xff0c;只跟随骨骼的移动&#xff0c;不随骨骼移动发生形变&#xff0c;如机械.软体物体&#xff0c;跟随骨骼的移…

手写RPC框架第7版-框架容错性相关设计

源代码地址&#xff1a;https://github.com/lhj502819/IRpc/tree/v8 系列文章&#xff1a; 注册中心模块实现路由模块实现序列化模块实现过滤器模块实现自定义SPI机制增加框架的扩展性的设计与实现基于线程和队列提升框架并发处理能力框架容错性相关设计通过SpringBoot-Starte…

数据结构:关于空间复杂度的例题计算

1、计算冒泡排序的空间复杂度 答案&#xff1a;该程序空间复杂度为O(1)。 解析&#xff1a;该程序在栈空间所申请的临时变量空间只有三个&#xff0c;也就是看成常数个&#xff0c;所以是O(1)。如下图所示 2、动态开辟N个数的数组空间复杂度 答案&#xff1a;该程序空间复杂度…

【UE4 第一人称射击游戏】31-更好的UI界面

素材资料地址&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1epyD62jpOZg-o4NjWEjiyg密码&#xff1a;jlhr上一篇&#xff1a;【UE4 第一人称射击游戏】30-简单的任务提示功能本篇效果&#xff1a;步骤&#xff1a;在UE中新建一个“HUD_Export”文件夹&#xff0c;将所…

《码出高效:java开发手册》七 - 并发与多线程

前言 现代CPU运算速度以百亿计&#xff0c;家用计算机和操作系统也是数十进程&#xff0c;数百线程&#xff0c;程序相应也需要采用多线程和并发的技术 并发和并行&#xff1a;并发是指某个时间段&#xff0c;多任务处理&#xff1b;并行是指同时处理多任务的能力&#xff1b;…

接口测试项目实战与经典面试题解析,挑战 BAT 大厂必会!

近年来&#xff0c;接口测试技术体系已在各大互联网企业落地普及&#xff0c;各种新接口框架不断涌现&#xff0c;业界也形成了不少成熟方案和成功案例。当前 BAT 大厂在招聘测试人员时&#xff0c;接口测试技能和项目经验是必考重点&#xff0c;直接影响到职级评定和薪资水平&…

2023/1/10 Vue学习笔记6 - 路由基本使用

1 路由的简介-router 1、路由就是一组key-value的对应关系。 2、多个路由&#xff0c;需要经过路由器的管理。 SPA (single page web application&#xff09;应用 - 单页面web应用 {"key":"/class","value":"班级组件" }1.vue-rout…

kali中wpscan工具使用

一.wpscan工具简介 wpscan是一款专门针对wordpress的扫描工具&#xff0c;采用ruby语言编写&#xff0c;能够扫描worpress网站中包括主题漏洞、插件漏洞以及wordpress网站本身存在的漏洞。wpscan还可以扫描wordpress网站启用的插件和其他功能。 在Kali Linux系统中&#xff0…

关于distinct——去除重复记录

distinct译为&#xff1a;不同的&#xff0c;有区别的&#xff1b;在SQL语句中表示去除重复记录的意思 举例&#xff1a;在员工表emp中查询所有的工作岗位。 分析&#xff1a;在员工表中的工作岗位字段下有重复的工作岗位&#xff0c;我们在查询的时候就希望将重复的工作岗位显…

数据库取证——MySQL基础知识

目录 一、数据库基础知识 &#xff08;一&#xff09;数据库&#xff08;DB&#xff09; &#xff08;二&#xff09;数据库管理系统&#xff08;DBMS&#xff09; &#xff08;三&#xff09;数据库系统&#xff08;DBS&#xff09; &#xff08;四&#xff09; 数据库的…

【Unity云消散】简单理论基础:实现边缘光

写在前面 既然想要实现云的消散效果&#xff0c;那么边缘光如何计算也是一个重点。 在Unity Shader入门精要的14章&#xff0c;介绍轮廓线渲染就介绍了——轮廓边检测&#xff0c;而边缘光也是需要先检测出轮廓边再进行的。 Unity3D Shader系列之边缘光RimLight 这篇博客给…

Go专家编程读书小记

文章目录协程进程和线程进程&#xff1a;进程间通信&#xff1a;线程&#xff1a;区别&#xff1a;协程GMP模型调度策略内存管理内存分配span&#xff1a;cache&#xff1a;central&#xff1a;heap&#xff1a;垃圾回收常见的垃圾回收算法&#xff1a;三色标记&#xff1a;垃圾…

【NI Multisim 14.0原理图设计基础——查找元器件】

目录 序言 一、查找元器件 &#x1f34d;1.浏览元器件 &#x1f34d;2.搜索元器件 &#x1f34d; 3.显示找到的元器件及其所属元器件库 &#x1f34d; 4.加载找到元器件的所属元器件库 序言 NI Multisim最突出的特点之一就是用户界面友好。它可以使电路设计者方便、快捷地…

大资金现金管理的利器:稳定币网格做市策略

数量技术宅团队在CSDN学院推出了量化投资系列课程 欢迎有兴趣系统学习量化投资的同学&#xff0c;点击下方链接报名&#xff1a; 量化投资速成营&#xff08;入门课程&#xff09; Python股票量化投资 Python期货量化投资 Python数字货币量化投资 C语言CTP期货交易系统开…

从一条记录说起—— InnoDB 记录结构

准备工作 到现在为止&#xff0c;MySQL对于我们来说还是一个黑盒&#xff0c;我们只负责使用客户端发送请求并等待服务器返回结果&#xff0c;表中的数据到底存到了哪里&#xff1f;以什么格式存放的&#xff1f;MySQL是以什么方式来访问的这些数据&#xff1f;这些问题我们统…

springboot构造树形结构数据并查询的方法

因为项目需要,页面上需要树形结构的数据进行展示(类似下图这样),因此需要后端返回相应格式的数据。 不说废话,直接开干!!! 我这里用的是springboot+mybatis-plus+mysql,示例的接口是查询一级权限以及二级权限、三级权限整个权限树… 下面是导入的maven依赖 <depe…