终极排序(快排,归并,库函数)

一、快速排序

1、确定分界点:q [ l ] , q [ ( l + r ) / 2 ] , q [ r ] ,或者其它区间之中的随机数。(左 l 右 r )
2、调整区间:(较难理解的部分)
        (1)、暴力做法
                (1)开两个数组a[   ]   b[   ]
                (2)扫描 q [ l ] ---> q [ r ]整个区间
                                 q [ i ]<=x , x ---> a[   ]
                                  q [ i ]>x , x ---> b[   ]
        (2)、优雅做法hhh
                用两个指针  : 左边 i 指针  右边 j 指针
                        (1) i <= x 就右移,直到 i >= x 时停下
                        (2) j >= x 就左移,直到 j <= x 时停下
                        (3) swap ( i 指向的数, j 指向的数)
                重复上述(1)(2)(3)操作
3、递归处理左右两段

void quick_sort(int q[], int l, int r){if(l>=r)return;int x= q[(l+r)/2], i=l-1, j=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);
}

 二、归并排序

归并排序——分治
步骤一、确定分界点(中点)
         mid =  ( l + r ) / 2          (左 l 右 r )
步骤二、递归排序左右两段            
步骤三、归并(较难理解的部分)
         运用双指针算法    将左右两个有序序列合并成一个有序序列

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;while( i<=mid && j<=r )if(q[i] <= q[j])  tmp[k++] = q[i++];else  tmp[k++] = q[j++];while(i <= mid) tmp[k++] = q[i++];while(j <= r) tmp[k++] = q[j++];for( i=l,j=0; i<=r;  i++,j++ ) q[i]=tmp[j];
}

 三、库函数处理排序问题

在C++中使用sort()函数需要使用#include<algorithm>头文件

三个参数sort(begin, end, cmp)

其中 begin为指向待sort()的数组的第一个元素的指针

   end为指向待sort()的数组的最后一个元素的下一个位置的指针

   cmp参数为排序准则,cmp参数可以不写(如果不写的话,默认从小到大进行排序)

下面我们用这三种方法来实现一个简单例题 输出样例

 一、快速排序

#include<iostream>
using namespace std;const int N=1e6+10;
int n;
int q[N];void quick_sort(int q[],int l,int r){if(l>=r)  return;int x=q[(l+r)/2];int i=l-1;int j=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(){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;
} 

 二、归并排序

#include <iostream>
using namespace std;const int N=1e6+10;
int q[N];
int n;
int tmp[N];     //归并排序除了快排的参数,还需要tmp[]数组辅助void merge_sort(int q[], int l, int r){if(l>=r) return;int mid=(l+r)/2;merge_sort(q,l,mid);merge_sort(q,mid+1,r);int k=0;    //k表示现在tmp里面已经有几个数了int i=l;    //i指针指向left的起点int j=mid+1;//j指针指向right的终点while(i<=mid&&j<=r){if(q[i]<=q[j])  tmp[k++]=q[i++];else   tmp[k++]=q[j++];}while(i<=mid)   tmp[k++]=q[i++];    //如果左边还没有循环完就补齐while(j<=r)     tmp[k++]=q[j++];    //如果右边还没有循环完就补齐for(i=l,j=0;i<=r;i++,j++){q[i]=tmp[j];    //将tmp[]中的内容移植到q[]中}
}int main(){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;
}

  三、库函数处理排序问题(非常easy)

#include <iostream>
#include <algorithm> 
using namespace std;const int N=1e6+10;
int q[N];
int n;int main(){cin>>n;for(int i=0;i<n;i++){scanf("%d",&q[i]);}sort(q,q+n);for(int i=0;i<n;i++){printf("%d ",q[i]);}return 0;
}

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

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

相关文章

Linux 学习笔记(12)

十二、 系统服务 1 、系统服务分类&#xff0c;根据其使用的方法来分&#xff0c;可以被分为三类 a、由 init 控制的服务&#xff1a;基本都是系统级别的服务&#xff0c;运行级别这一章讲的就是这一类的服务 b、由 System V 启动脚本启动的服务&#xff1a;和我们打交道最多…

Spring Security-快速开始(Spring Security 身份认证流程)

文章目录 spring security基本原理springSecurity 拦截器链Spring Security 的核心元素spring security如何进行用户认证(重要)spring security使用流程demo@EnableWebSecurity 注解@EnableGlobalMethodSecurity 注解spring security controller层实现登陆spring security 自定…

爬虫入门到精通_实战篇10(使用Redis+Flask维护动态代理池)

1 目标 为什么要用代理池 许多网站有专门的反爬虫措施&#xff0c;可能遇到封IP等问题。互联网上公开了大量免费代理&#xff0c;利用好资源。通过定时的检测维护同样可以得到多个可用代理。 代理池的要求 多站抓取&#xff0c;异步检测定时筛选&#xff0c;持续更新提供接…

自然语言处理(NLP)

自然语言处理&#xff08;NLP&#xff09;技术是研究和开发使计算机能够理解和处理人类语言的方法。下面是几个例子说明NLP技术的应用&#xff1a; 语音识别&#xff1a;语音识别技术允许计算机将人类的口头语言转换为机器可理解的文本。例如&#xff0c;智能助理如Siri和Alexa…

Linux系统部署Discuz论坛并发布至公网随时随地可远程访问

目录 ​编辑 前言 1.安装基础环境 2.一键部署Discuz 3.安装cpolar工具 4.配置域名访问Discuz 5.固定域名公网地址 6.配置Discuz论坛 结语 作者简介&#xff1a; 懒大王敲代码&#xff0c;计算机专业应届生 今天给大家聊聊Linux系统部署Discuz论坛并发布至公网随时随地…

基于Golang客户端实现Nacos服务注册发现和配置管理

基于Golang客户端实现Nacos服务注册发现和配置管理 背景 最近需要把Golang实现的一个web项目集成到基于Spring Cloud Alibaba的微服务体系中&#xff0c;走Spring Cloud Gateway网关路由实现统一的鉴权入口。 软件版本 组件名称组件版本Nacos2.2.0Go1.21.0Ginv1.9.1Nacos-s…

《汇编语言》- 读书笔记 - 第16章-直接定址表

《汇编语言》- 读书笔记 - 第16章-直接定址表 16.1 描述了单元长度的标号&#xff08;数据标号&#xff09;检测点 16.1 16.2 在其他段中使用数据标号assume通过标号取地址检测点 16.2 16.3 直接定址表&#xff08;Direct Addressing Table&#xff09;例1分析代码效果 例2分析…

【奇淫巧计】Unity 如何对齐父容器

给你个parent你敢对齐吗&#xff1f;&#xff1f;&#xff1f; 下面是我多年实战总结出的技巧&#xff0c;一般人我都不告诉&#xff0c;不墨迹&#xff0c;直接上代码 var parentRect parent.GetComponent<RectTransform>();this.rectTransform.pivot parentRect.piv…

NLP_文本数据增强_5(代码示例)

学习目标 了解文本数据增强的作用. 掌握实现常见的文本数据增强的具体方法. 常见的文本数据增强方法: 回译数据增强法 1 回译数据增强法 回译数据增强目前是文本数据增强方面效果较好的增强方法, 一般基于google翻译接口, 将文本数据翻译成另外一种语言(一般选择小语种),之后…

代购集运公司需要什么样的信息化技术服务|集运系统对接主流电商API接口以实现客户丰富的代购体验

代购集运公司可以考虑以下信息化服务&#xff1a; 1、网络平台 代购集运公司可以建立一个在线平台&#xff0c;让客户能够浏览商品、下单、查询订单状态等操作。 平台也可以提供在线支付和快递跟踪等功能&#xff0c;方便客户和公司的沟通和交流。接入主流电商平台API接口&am…

Spring Boot的启动流程(个人总结,仅供参考)

SpringBoot应用程序的启动流程主要包括初始化SpringApplication和运行SpringApplication两个过程。 1.初始化SpringApplication包括配置基本的环境变量、资源、构造器和监听器&#xff0c;初始化阶段的主要作用是为运行SpringApplication实例对象启动环境变量准备以及进行必要的…

应用在智能空调触摸屏中的高精度触摸芯片

智能空调是具有自动调节功能的空调。智能空调系统能根据外界气候条件&#xff0c;按照预先设定的指标对温度、湿度、空气清洁度传感器所传来的信号进行分析、判断、及时自动打开制冷、加热、去湿及空气净化等功能的空调。适合放在卧室&#xff0c;客厅等地方。 在中央控制系统…

中国电子学会2021年3月份青少年软件编程Sc ratch图形化等级考试试卷四级真题

【 单选题 】 1.运行如下图所示的程序后&#xff0c;以下描述正确的是&#xff1f; A&#xff1a;角色停留在&#xff08;0,0&#xff09;的位置&#xff0c;不会移动。 B&#xff1a;角色会在舞台上沿水平方向不停地左右往返移动&#xff0c;碰到边缘就反弹。 C&#xff1a…

k8s部署mysql

&#xff08;作者&#xff1a;陈玓玏&#xff09; 一、前置条件 已部署k8s&#xff0c;服务端版本为1.21.14 二、部署mysql 拉取镜像&#xff1b; docker pull mysql将账号密码等信息写到configmap&#xff0c;创建configmap&#xff1b; apiVersion: v1 kind: ConfigM…

亚信安慧AntDB:融合架构下的数据管理利器

AntDB的独特架构将集中式和分布式部署模式巧妙融合&#xff0c;为用户提供了全方位的数据管理解决方案。这种一站式的特性使得用户无需在不同系统间来回切换&#xff0c;极大地提高了工作效率。 AntDB同时具备集中式和分布式系统的优点&#xff0c;集中式架构拥有简单易用、管…

MyBatis动态查询

1.问&#xff1a;Mybatis是什么&#xff1f; AI答&#xff1a; MyBatis 是一个开源的持久层框架&#xff0c;它主要解决了传统 JDBC 开发过程中的大量样板代码和繁琐的参数处理问题。MyBatis 通过 XML 或注解的方式将 SQL 语句与 Java 对象进行映射&#xff0c;提供了一种优雅…

邦芒宝典:职场新人需要具备的十大优秀品质

​​职场新人需要具备的十大优秀品质可以概括为以下几点&#xff1a; 1、良好敬业精神和工作态度&#xff1a;员工应具备对工作的热情和对公司的忠诚度&#xff0c;这是企业遴选人才时的首要考虑因素。 2、高专业能力和学习潜力&#xff1a;员工需要具备一定的专业知识和工作能…

贪心算法练习题(最小化战斗力差距、谈判、纪念品分组、分糖果)

目录 一、贪心算法的介绍 二、贪心算法的实现步骤 三、最小化战斗力差距 四、谈判 五、纪念品分组 六、分糖果 一、贪心算法的介绍 贪心的基本原理:每一步都选择局部最优解&#xff0c;而尽量不考虑对后续的影响&#xff0c;最终达到全局最优解。 贪心的局限性:贪心算法…

使用GRU进行天气变化的时间序列预测

本文基于最适合入门的100个深度学习项目的学习记录&#xff0c;同时在Google clolab上面是实现&#xff0c;文末有资源连接 天气变化的时间序列的难点 天气变化的时间序列预测涉及到了一系列复杂的挑战&#xff0c;主要是因为天气系统的高度动态性和非线性特征。以下是几个主…

代码随想录算法训练营第51天| 309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费、股票总结

309.最佳买卖股票时机含冷冻期 完成 思路&#xff1a; 加入冷冻期以后&#xff0c;两个状态就不够用了。 状态一&#xff1a;持有股票状态&#xff08;今天买入股票&#xff0c;或者是之前就买入了股票然后没有操作&#xff0c;一直持有&#xff09;不持有股票状态&#xff0…