关于各种排序方式

对于STL实现的sort: int, double, string自定义排序顺序和结构体需要自定义cmp

其中sort(首元素地址, 尾元素后面一个的位置, 自定义比较函数);

因此sort默认从0~n-1排序

自定义cmp

bool cmp(相对靠前的元素,相对靠后的元素)

因此sort是两元素之间的比较,所以只要符合两类型元素之间的比较通过结构体来a和b的不同形式来得到想要的结果

计数/桶排序: 计数器记录数字出现次数依次遍历输出

选择排序: 依次固定当前位为最大/小值,若不是则swap

for(int i = 1; i <= n - 1; ++ i)
for(int j = 1 + 1; j <= n; ++ j )

结构体使用&排序

struct kid
{
bool check;
double s;
}a[2005]; //kid q[N];//第二种 bool cmp(kid x,kid y)//结构体自定义cmp排序
{
return x.s < y.s;
}
sort(a + 1,a + n + 1, cmp);

多关键字排序: 核心是枚举相对顺序即可

排序的本质就是相对的顺序,所以即使多个限制条件,改变的也只是两个元素之间的(队伍中小x和小y之间)相对顺序

插入排序: 把当前位制造空位,最后通过移动插入合适位置

for(int i = 1; i <= n; ++ i) {
int now = a[i], j;//制造空位,通过若前面比我大则将其向后移位
//最后放入合适位置
for(int j = i - 1; j >= 1; -- j) {
if(a[j] > now) {
a[j + 1] = a[j];
}
else break;
}
a[j + 1] = now;//放入对应位置
}

冒泡排序: 会存储当前最大/小值,以确保最高位确定

for(int i = 1; i <= n; ++ i) {
for(int j = 1; j <= n - i; ++ j) {
if(a[j] > a[i + 1]) {
swap(a[j], a[i + 1]);
}
}
}

快速排序: 通过哨兵构造左边 < 哨兵 < 右边

排序算法(cmp支持两类型相同元素之间的构造)的更多相关文章

  1. Codeforces Round #283 (Div. 2) A. Minimum Difficulty【一个数组定义困难值是两个相邻元素之间差的最大值。 给一个数组,可以去掉任意一个元素,问剩余数列的困难值的最小值是多少】

    A. Minimum Difficulty time limit per test 2 seconds memory limit per test 256 megabytes input standa ...

  2. 消除两个inline-block元素之间的间隔

    发现问题 两个inline-block元素之间的间隔.如下图 期望 消除两个inline-block元素之间的间隔. 解决方法 1.父元素字体大小设置为0 间隔的形成是非元素标签形成的 /** 方案1 ...

  3. JQ 查找 两个同辈元素之间 的同辈元素 nextUntil() 用于做一个多级菜单

    可以应用的地方,参考了淘宝的API菜单列表 我自己的应用

  4. 我们一起来排序——使用Java语言优雅地实现常用排序算法

    破阵子·春景 燕子来时新社,梨花落后清明. 池上碧苔三四点,叶底黄鹂一两声.日长飞絮轻. 巧笑同桌伙伴,上学径里逢迎. 疑怪昨宵春梦好,元是今朝Offer拿.笑从双脸生. 排序算法--最基础的算法,互 ...

  5. 各种排序算法及其java程序实现

    各种排序算法:冒择路(入)兮(稀)快归堆,桶式排序,基数排序 冒泡排序,选择排序,插入排序,稀尔排序,快速排序,归并排序,堆排序,桶式排序,基数排序 一.冒泡排序(BubbleSort)1. 基本思想 ...

  6. 八大排序算法Java实现

    本文对常见的排序算法进行了总结. 常见排序算法如下: 直接插入排序 希尔排序 简单选择排序 堆排序 冒泡排序 快速排序 归并排序 基数排序 它们都属于内部排序,也就是只考虑数据量较小仅需要使用内存的排 ...

  7. 排序算法及其java实现

    各种排序算法:冒择路(入)兮(稀)快归堆,桶式排序,基数排序 冒泡排序,选择排序,插入排序,稀尔排序,快速排序,归并排序,堆排序,桶式排序,基数排序 一.冒泡排序(BubbleSort) 1. 基本思 ...

  8. 八大排序算法总结与java实现(转)

    八大排序算法总结与Java实现 原文链接: 八大排序算法总结与java实现 - iTimeTraveler 概述 直接插入排序 希尔排序 简单选择排序 堆排序 冒泡排序 快速排序 归并排序 基数排序 ...

  9. 排序算法大汇总 Java实现

    一.插入类算法 排序算法的稳定性:两个大小相等的元素排序前后的相对位置不变.{31,32,2} 排序后{2,31,32},则称排序算法稳定 通用类: public class Common { pub ...

  10. Java排序--排序算法(内排序)

    常用内排序算法 我们通常所说的排序算法往往指的是内部排序算法,即需要排序的数据在计算机内存中完成整个排序的过程,当数据率超大或排序较为繁琐时常借助于计算机的硬盘对大数据进行排序工作,称之为外部排序算法 ...

随机推荐

  1. 遇到的错误之“Could not copy property 'repositoryId' from source to target; nested exception is java.lang.reflect.InvocationTargetException”

    [ERROR][2023-09-03 21:54:10] | Combination收入费用数据导出异常 org.springframework.beans.FatalBeanException: C ...

  2. C++ ADL 与 模板

    什么是ADL ADL(Argument Dependent Lookup),参数依赖查找,明确的意思是依赖参数的函数查找,即对于函数调用,不仅会依照常规的名称查找规则,还会在函数参数所在的命名空间内查 ...

  3. Axios,fetch,ajax的区别

    axios1.是一个常用的http库,可用于浏览器和nodejs的客户端:2.同时处理并发请求:3.拦截器(请求拦截器interceptors.request.响应拦截器interceptors.re ...

  4. L2-1、打造稳定可控的 AI 输出 —— Prompt 模板与格式控制

    一.为什么需要 Prompt 模板? 在与 AI 模型交互时,我们经常会遇到输出不稳定.格式混乱的问题.Prompt 模板帮助我们解决这些问题,通过结构化的输入指令来获得可预测且一致的输出结果. 模板 ...

  5. 面试题:String,StringBuilder,StringBuffer三者的区别

    摘要:总结Java中的String,StringBuilder,StringBuffer三者的区别和联系,介绍后两者的扩容机制.   Java中的String,StringBuilder,String ...

  6. Qt 图片轮播

    最近研究了一下图片轮播,主要是用到了QPropertyAnimation这个类,具体代码示例如下: main.cpp #include <QApplication> #include &q ...

  7. 关于java中动态加载字节码的多种方法

    关于java中动态加载字节码的多种方法 在反序列化漏洞中:经常会遇到TemplatesImpl或BCEL相关的代码,它们就是用来动态加载恶意字节码执行任意命令的; 以及理解这些机制也是理解内存马工作原 ...

  8. java的StackOverflowError异常

    之前明明能查到,现在突然报错StackOverflowError,并一直在控制台返回空对象 多次遇到这种情况 发现是东西存入缓存中,缓存内存不够导致栈溢出,刷新kill缓存即可

  9. 浅析百万级分布式调度引擎——DAGScheduleX能做什么?

    公交车伴随着我们的日常生活已是随处可见,不同路线的公交车根据各自的时间表有序发出,到达站点,接上站台的乘客再缓缓驶向下一站--早高峰会有短区间的加班车,发车间隔也更短,夜半时分的班次则间隔更长.这一切 ...

  10. Vertx 实现webapi实战项目(三)

      实现消息分发和handler分配:上传json根据mId字段不同提供不同的解析器,然后将消息分发到不同的handler中. 一:消息分发 1:建立消息解析.新建接口IMessageRecogniz ...