慢排算法 & sort 注意事项

C++排序算法深度解析:从基础实现到std::sort实战优化 排序算法是计算机科学的核心基础,它通过特定的比较和交换逻辑,将数据元素按照指定顺序重新排列,其效率直接影响程序的性能。从时间复杂度O(n²)的冒泡、选择、插入排序等基础算法,到O(n log n)的快速排序、归并排序、堆排序等高效算法,每种算法都有其独特的原理与适用场景。在C++工程实践中,标准库提供的std::sort函数通常基于Introsort(内省排序)实现,它综合了快速排序、堆排序和插入排序的优势,是处理通用排序需求的高效工具。理解不同算法的稳定性、空间复杂度以及对缓存的影响,对于优化数据处理、游 阅读详情

现在经常用 sort 啦 =w= 我目前唯一用的 STL 的东西 先放一下这个的

注意平时不打 using namespace std 的 这时要加上!

sort 用法大概是这样的 ——> sort(s,s + len,cmp) cmp可加可不加 干嘛用的呢 后面再说

s 是数组 然后 len 是数组长度 (居然还要手打=-=) 但这里要注意这是 0 下标开始排的

因此如果要从 s[1] 排到 s[len] 的话 要改成 sort(s + 1,s + len + 1,cmp)

cmp 是什么呢 答案是 compare (比较) sort 默认给你从小排到大的说=-=

如果要从大到小 就得自己弄个 cmp 函数 像这样

//关于函数类型 事实上 bool 和 int 也可以 本人喜欢用 short
//关于括号里的 网上dalao们都用的是 const int &x 之类 我太懒了=-=
short cmp(int x,int y)
{
	return x > y;
}// x < y 就是从小到大 然而那样的话根本不用打这个子程序的说

然后如果结构体要排序呢 就要把部分东西改一下=-= 像这样

struct num {
	int id,v;
} s[233];
short cmp(num x,num y) //类型要变
{
	return x.v < y.v; //自定义要按照哪个元素比较
}
//当然有时要求某值相同输出编号最小之类的题目 就要像下面这样
short cmp(num x,num y)
{
	if (x.v == y.v) return x.id < y.id; //值相同则比较编号
	return x.v < y.v;
}

ok 下面是鸡肋般的手打慢排心路历程=-=

 

做个离散化的题呢 手打快排 结果发现出了点问题 (我不会说是我不会用sort的 2018.8.22 决定改用 sort)

虽然我的这个快排和网上的很大不同 要慢上许多 但......太懒了不想学 这个多好~

又短 又简单 易记 又优美 你看 我还没缩行~ 但是...我怎么TLE和MLE了

于是移至某谷的快排模板题 返璞归真地用Pascal手打了一下 结果......

Pascal记录:

https://www.luogu.org/record/show?rid=8116157

https://www.luogu.org/record/show?rid=8116211

细细思考 反复推敲 终于......

https://www.luogu.org/record/show?rid=8116231

于是发现了几个大问题

Pascal的 这个快排打法 完全是固定的啊=-=

于是放个C++代码记录一下 防止以后搞错

void kp(int a,int b)
{
	int x = a,y = b,mid = i[(x + y) >> 1];
	while (x <= y)
	{
		while (i[x] < mid) ++x;
		while (i[y] > mid) --y;
		if (x <= y)
		{
			swap(i[x],i[y]);
			++x;
			--y;
		}
	}
	if (x < b) kp(x,b);
	if (a < y) kp(a,y);
}

 

外面while 必须是 < 不能是<= 虽然我弄不懂为什么相同的时候还要判断 同下还要循环(尴尬)

 

里面while 必须加等于 虽然我十分弄不懂(再次尴尬)

里面判断 为防止 x==y 时 死循环 要判断<=

关于if里的 ++x 和 --y 一定要放里面不能放外面 否则会错 EG https://www.luogu.org/record/show?rid=8117423

最后两if语句 两数等于就不用了(原本就不用)

C/C++ Slow Sort慢排序算法详解及源码 Slow Sort慢排序算法是一种非常低效的排序算法,也被称为鸡尾酒排序或睡眠排序。该算法通过不断比较相邻的元素,并在它们之间发生交换,直到整个序列排序完成。Slow Sort慢排序算法的优点是简单易懂,实现起来相对简单。 阅读详情

相关推荐

Python slow sort慢排序算法详解及源码

慢排序(Slow sort)是一种非常低效的排序算法,它通过递归地交换相邻元素来实现排序。慢排序(Slow sort)是一种非常低效的排序算法,它通过递归地交换相邻元素来实现排序。慢排序(Slow sort)是一种非常低效的排序算法,它通过递归地交换相邻元素来实现排序。慢排序(Slow sort)是一种非常低效的排序算法,它通过递归地交换相邻元素来实现排序。慢排序(Slow sort)是一种非常低效的排序算法,它通过递归地交换相邻元素来实现排序。慢排序算法的优点是实现简单,代码易于理解和编写。

希望我的博客,能帮上你解决学习中工作中所遇到的问题 1182

C++手写快排(QuickSort)

int Sort(int arr[], int nLow, int nHigh) { int temp = arr[nLow]; while(nLow &amp;lt; nHigh) { //从后往前找比标准值小的 while(nLow&amp;lt;nHigh) { if(arr[nHigh]&amp;lt;temp) { arr[nLow]=arr...

weixin_41099342的博客 1256

C/C++ Comb Sort梳排序算法详解及源码

Comb Sort梳排序算法是一种改进的冒泡排序算法,它通过对相距较远的元素进行比较和交换来提高排序的效率。该算法的基本思想是通过比较相邻的元素,如果它们的顺序不正确就交换它们,直到所有的元素都按照正确的顺序排序。与冒泡排序不同的是,Comb Sort会首先通过一个较大的间隔进行比较和交换,然后逐渐缩小这个间隔,直到最后变成1,此时算法表现为传统的冒泡排序。

希望我的博客,能帮上你解决学习中工作中所遇到的问题 8039

手写C++快速排序

1、快速排序的原理 2、代码

weixin_42887343的博客 620

C/C++ library Sort库排序算法详解及源码

Library Sort算法的基本思想是通过预处理数据,将待排序的序列分成许多小的块,并对每个块进行排序。然后,通过插入排序算法对这些有序的块进行合并,最终得到整个序列的有序结果。Library Sort库排序算法是一种改进的插入排序算法,它自动选择合适的插入位置,可以提高插入排序的效率。

希望我的博客,能帮上你解决学习中工作中所遇到的问题 7966

快速排序c++源代码

快速排序 c++ 源代码, 算法,排序问题快速排序 c++ 源代码, 算法,排序问题

手写快速排序 简单暴力 c++实现 源码

虽然可以自己用sort()函数实现,但是自己写一遍也有利于理解快排 #include&lt;iostream&gt; using namespace std; void quicksort(int a[], int start, int end)//手写快排 { int i = start, j = end, temp, flag = a[i]; do { while (a[i] &lt; flag)i++; while (a[j] &gt; flag)j--; if (i &lt;=

weixin_66033926的博客 1082

二分排序(快排)

C语言二分排序代码,简单明了。。。。。。。。。。。。

【算法】C++快排——通俗易懂的理解方式

C++快速排序(Quick sort)一、排序算法二、快排思路1.思路:分治、“挖坑”2.步骤三、测试代码 一、排序算法 排序算法大体可分为两类: 一种是稳定的排序算法,主要有:冒泡排序,插入排序,归并排序 另一种则是不稳定的排序算法,时间复杂度可以达到O(n),主要有:选择排序,希尔排序,堆排序,快速排序 快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序n个元素要O(nlogn)次比较。在最坏状况下则需要O(n^2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他O(nlogn)

weixin_41118203的博客 3737

datart 二开环境搭建

下载源码, 地址: https://github.com/running-elephant/datart, dev 分支; 解压后使用 idea 打开; 服务端: 3.1 安装依赖, idea会自动安装; 3.2 修改配置文件 /config/application.yml 3.3 创建数据库,并将bin/datart.sql导入到数据库中 3.4 入口: /server/src/main/java/datart/DatartServerApplication.java [外链图片转存失败,源站可能有防.

又是再见? 6133

IMU标定中的Allen方差

Allen方差 Allen方差是IMU标定任务中的常用工具。IMU标定可以分为确定性误差和随机误差,确定性误差包括:scale、bias、misalignment。随机误差则主要是高斯白噪声和bias随机游走。Allen方差主要用于标定随机误差。 Allen方差获取 Allen方差的计算方法如下: 保持IMU静止, 采集N个数据点。 将N个点定长分组,常用的交叠式Allen方差如下(n=3): 对于每个子集,计算均值后,计算相邻两组的方差,得到的时间-方差曲线即为Allen方差。 Alle

realjc的博客 5734

STL——sort()函数

sort函数是用于排序的函数,要使用的时候要加上头文件"#include &lt;algorithm&gt;"。 在一些题目中需要排序,但是排序并不是题目的重点,这时使用sort()函数可以大大提高我们编写代码的效率。 1.基础排序代码: #include &lt;iostream&gt; #include &lt;algorithm&gt; //记得添加这个头文件 using namespac...

koori_145的博客 437

大疆Livox Mid-70雷达的使用

一、前期准备 (一)、使用Livox Viewer测试雷达 1、设置静态IP sudo ifconfig enx081f7152092a 192.168.1.50 查看IP是否设置成功 lacyexsale@lacyexsale-KLV-WX9:~$ ifconfig enx081f7152092a Link encap:以太网 硬件地址 08:1f:71:52:09:2a inet 地址:192.168.1.50 广播:192.168.1.255 掩码:255.255.25

LacyExsale的博客 1万+

C++常用算法解析:sort、find、for_each、copy

本文深入解析了C++标准库中的四大核心算法:sort、find、for_each和copy。sort采用混合排序策略(IntroSort),支持自定义比较器;find提供线性查找功能,包括条件查找版本;for_each实现容器遍历操作;copy用于区间数据复制。这些算法通过提供高效、通用的数据处理方式,显著提升开发效率,使用时需注意各自的特性和适用场景。(149字)

qq2745567641的博客 1426

ASP.NET Core Identity + Mysql(实战一)——注册登陆

在进行实战之前,我们先来了解一下Identity。 ASP.NET Core Identity是用于构建ASP.NET Core Web应用程序的成员资格系统,包括成员资格、登录和用户数据存储。简单的来讲包括: 1.用户数据存储(使用任意你喜欢的关系型数据库,从sqllite到mysql、sqlserver等等,由Entity Framwork 支持) 2.登陆、注册外加身份认证(基于coo...

weixin_40359716的博客 1399

Windows 11 下 WSL 离线安装 Ubuntu 22.04 保姆级教程(国内镜像加速版)

本文提供了一份针对中国地区用户的Windows 11下WSL离线安装Ubuntu 22.04的详细教程。通过使用国内镜像源加速下载安装包,并配合PowerShell命令完成部署,有效解决了官方商店下载缓慢的问题。教程涵盖环境准备、离线包获取、安装初始化及安装后的关键优化配置,帮助用户快速搭建高效的Linux开发环境。

weixin_28452161的博客 1378

STL中Sort算法介绍

Sort函数是一个比较方便使用的STL函数,可以直接来进行各种排序。由于在工作的时候有一个排序,刚开始没怎么注意!就用sort算法来实现了,后来出现了一些问题才导致我才对sort算法的一些注意事项的总结:1.       sort 算法函数的用法。vector vect;//….Sort(vect.begin(),vect.end();//相当于下面的调用Sort(vect.begin(),vect.end(),less()); //如果不提供比较函数是系统默认从小到大排序当我们要按某种方式进行排序时,需要

North_P的专栏 712

VMware + ubuntu20.04 + qemu安装

遇到报错可参考:(从ubuntu裸系统开始安装)

NosONE 3230

【NumPy】全面解析NumPy的sort函数:高效排序算法与应用技巧

全面解析NumPy的sort函数:高效排序算法与应用技巧

科技改变人类,技术成就未来 1733

从零构建:四轴机械臂D-H参数建模与MATLAB实战指南

本文详细介绍了四轴机械臂D-H参数建模的完整流程与MATLAB实战应用。从机械臂运动学基础出发,解析D-H参数原理与坐标系建立规则,提供MATLAB Robotics Toolbox的安装、模型创建及正逆运动学求解的代码实现。特别针对四轴机械臂的逆运算优化、轨迹规划和奇异位形规避等高级应用给出实用解决方案,是机器人开发者的实战指南。

weixin_29062255的博客 419

SPI为什么不需要加上拉电阻

大家好,我是记得诚。I2C因为其开漏的结构,无法输出高电平,所以外部加上拉电阻。我们在使用SPI的时候,发现是不需要加上拉电阻的。主要因为SPI多为推挽的结构,推挽电路,高低电平都可以输出,所以外部不需要加上拉电阻。推挽电路可以用2个三极管或者2个MOS管搭建而成。

记得诚 2629

从伪代码到实战:Stalin Sort算法的完整解析与最佳实践

Stalin Sort是一种高效的排序算法,作为一种系统性的方法,能够将随机访问文件或数组的元素按顺序排列。它以O(n)的出色性能著称,被戏称为"史上最佳排序算法"。本文将带你深入了解这一独特算法的原理、实现方式和实际应用。 ## 什么是Stalin Sort? ### 算法起源与核心思想 Stalin Sort的概念最早由Mathew在2018年提出,其核心思想非常简单:遍历数组,检查元素

gitblog_00574的博客 897

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

sort()函数详解

目录前言使用sort实现比较函数cmp 前言 顾名思义,sort()就是用来排序的函数,它根据具体情况使用不同的排序方法,效率较高。 一般来说,不推荐使用C语言中的qsort函数,原因是qsort用起来比较繁琐,涉及很多指针的操作。 而且sort在实现中避免了经典快速排序中可能出现的会导致实际复杂度退化到O(n2)的极端情况。 话不多说了,下面我们来了解一下sort()函数的使用。 使用sort 需要的头文件 #include&lt;algorithm&gt; 需要的其他东西: using names

辉小歌的博客 7万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

从猴子排序到算法复杂度:C++实现Bogo Sort及其变种

排序算法是计算机科学的基础概念,用于将数据元素按特定顺序重新排列。其核心原理是通过比较和交换操作,逐步减少序列的逆序度,最终达到有序状态。高效的排序算法如快速排序、归并排序具有O(n log n)的时间复杂度,能处理大规模数据,在数据库索引、数据分析和系统调度等场景中至关重要。本文以Bogo Sort(猴子排序)这一极端案例为切入点,深入剖析其基于随机打乱的原理和惊人的O(n * n!)平均时间复杂度,通过C++实现和性能对比,直观展示算法效率的边界,并探讨Bozo Sort等变种,帮助开发者理解算法复杂度

weixin_30781107的博客 315

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

DEEP SORT目标跟踪算法论文下载

DEEP SORT目标跟踪算法论文下载 去发现同类优质开源项目:https://gitcode.com/ 本仓库提供DEEP SORT目标跟踪算法论文的下载资源。DEEP SORT是一种先进的多目标跟踪算法,结合了深度学习和传统的目标跟踪技术,能够在复杂场景中实现高效、准确的目标跟踪。 资源文件 标题: DEEP SORT目标跟踪算法论文 描述: DEEP SORT目标跟踪算法论文 使用说明 ...

gitblog_06608的博客 332

golang struct数组排序_go语言中排序sort的使用方法示例

前言sort包中实现了3种基本的排序算法:插入排序.快排和堆排序.和其他语言中一样,这三种方式都是不公开的,他们只在sort包内部使用.所以用户在使用sort包进行排序时无需考虑使用那种排序方式,sort.Interface定义的三个方法:获取数据集合长度的Len()方法、比较两个元素大小的Less()方法和交换两个元素位置的Swap()方法,就可以顺利对数据集合进行排序。sort包会根据实际数据...

weixin_39733146的博客 780
上一篇: 可持久化线段树 & 主席树 || 超详细解释 + 模板
下一篇: 邻接表代码 单向 + 双向 (存有向边 无向边)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值