前言

按名次排序(Rank Sort)就是我们在已知一个数组序列及其次序的时候将其的次序和对应序列按照一定顺序排列一下,比如一个数组a为{4,3,9,3,7},其对应次序为{2,0,4,1,3},排列后要使其次序变成{0,1,2,3,4}.说到底,就是次序和数组的重新归位问题。

第一种思路:使用额外的数组空间

想象一个已知每个人高矮顺序的一列队伍,如果我们要想让其重新排好,我们可以再寻找一个空地,然后逐个询问,比如到无序队伍的第一个人,我们可以问:你的次序是多少,他说:我在最后一个,那好,那你站那片空地中的最后一个位置去。我们依次询问,便可以在那片空地中把队伍重新排好,最后让那列队伍再回来,我们便达到了排序的目的。这种方法虽然不需要比较,但是面对比较大的数组,可能空间的分配就不那么容易。代码实现“

void rankSortWithAdditionArray(int a[],int r[],int n)
{int *u = new int [n];for (int i = 0;i<n;i++){u[r[i]] = a[i];}for(int i = 0;i<n;i++){a[i] = u[i];}delete []u;
}
void swap(int &t1,int &t2)
{int t = t1;t1= t2;t2 = t;}

第二种思路:重点放在位置上,不使用额外的数组空间

结合上面的思路我们可以换一种想法,我们是排序,不设计数据元素的剔除或者是增加,你可以去新的地方找那个位置,为啥不能在现在的位置上和别人交换一下。每个人都找好自己的位置,那我们最终的目的也就完成了。

void rankSortWithoutAdditionArray(int a[],int r[],int n)
{for(int i = 0;i<n;i++){if (r[i]!=i){int t = r[i];swap(a[t],a[i]);swap(r[t],r[i]);}}
}

以上就是我本人关于这个内容的一点思考,目前刚开始学习数据结构和算法的知识,可能有不对之处,欢迎大家批评指教!

C++中按名次排序的两个实现方式相关推荐

  1. 计算机word降序排列怎么做,word中怎么进行排序的两种方法

    word文档中表格除了作为我们的编辑和展示功能之外,还可以进行排序功能,十分方便,那么下面就由学习啦小编给大家分享下word中进行排序的技巧,希望能帮助到您. word中进行排序方法一: 步骤一:将光 ...

  2. html中img显示图片的两种常用方式

    html中img显示图片的两种常用方式 显示图片,尤其是二维码的时候,大都是自动生成的,所以就需要能够从后台返回字符串,前台浏览器进行解析.好了,下面是这两种方式. 1. <img src=&q ...

  3. 思科新版EI CCIE 企业网软定义中的VxLAN分布式网关两种部署方式

    思科新版EI CCIE 企业网软定义中的VxLAN分布式网关两种部署方式VXLAN集中式网关部署的不足:第一,同一二层网关下跨子网的数据中心三层流量都需要经过集中三层网关转发.第二,由于采用了集中三层 ...

  4. AOP 详解 、AOP 中通知类型 、AOP 两种实现方式(Schema-base 和 AspectJ)

    一.AOP AOP:中文名称面向切面编程 英文名称:(Aspect Oriented Programming) 正常程序执行流程都是纵向执行流程 3.1 又叫面向切面编程,在原有纵向执行流程中添加横切 ...

  5. java中程序跳转_java程序中先后台交互的两种实现方式以及页面之间的跳转

    虽然如今市面上很流行先后端分离,可是在不少企业中仍是使用的是SSH框架,先后端不分离. 那么此类先后端有其自身独特的先后台交互的方式,可是也支持js/jquery.下面对这两种方式作一下概括.java ...

  6. 【我的C语言学习进阶之旅】介绍一下NDK开发中关于JNI函数的两种注册方式:静态注册和动态注册

    目录 一.要介绍本篇博客的原因 二.静态注册 2.1 实现原理 2.2 实现过程 2.3 弊端 2.4 示例 三.动态注册 3.1 实现原理 3.2 实现过程 3.3 优点 3.4 示例 一.要介绍本 ...

  7. jqGrid排序的两种实现方式

    实现方案一客户端实现排序: jqGrid属性 loadonce:true时,所有数据加载在客户端,点击列标题由jqGrid在客户端自动排序,不再从服务器取值. 参考文件:ccMxCxTjCc.js j ...

  8. Excel 对表格的某一列数据进行名次排序

    列表数据如下图,根据列表数据在另一列中进行名次排序 点击工具菜单栏上的公式按钮,点击菜单下的自动求和函数,然后点击下拉框中的其他函数 在插入函数界面,在选择类别中,选择统计:在选择函数中,下拉选项框, ...

  9. android中的定时任务一般有两种机制,android 定时任务

    使用timertask进行定时任务 首先创建TimerTask: class SynchroTimerTask extends TimerTask { @Override public void ru ...

  10. IOS单例的两种实现方式

    单例模式算是开发中比较常见的一种模式了.在iOS中,单例有两种实现方式(至少我目前只发现两种). 根据线程安全的实现来区分,一种是使用@synchronized ,另一种是使用GCD的dispatch ...

最新文章

  1. Android重绘ListView高度
  2. 动态规划(DP)通俗讲解
  3. Spring中如何使用设计模式
  4. 平流式初沉池贮砂斗计算_水处理相关计算软件大全,提高工作效率必备
  5. jsp springmvc 视图解析器_Springmvc中多视图解析器解析问题
  6. Python:如何仅用递归函数和栈操作逆序一个栈
  7. 谷歌:CNN击败Transformer,有望成为预训练界新霸主!LeCun却沉默了...
  8. android本页切换子页,android ViewPager控件实现手势滑动切换页签-Fun言
  9. ajax+++fc,06. 实做AJAX(SEFC)
  10. Kubernetes-存储卷Volume
  11. ENVI 监督分类Max stdev from Mean 参数IDL中的设置
  12. oracle索引实现方式,Oracle中的索引原理(1)
  13. 如何从UCI获取数据集?
  14. Ubuntu查看硬盘序列号
  15. Vue2 面试题总结1(笔记自用)
  16. maya扇子动画_MAYA制作动画的十大原理!
  17. SAM/BAM文件格式简介(一)
  18. RFID门禁系统快速识别车辆管理
  19. 2022卡塔尔世界杯:跨境卖家如何用YouTube进行营销?
  20. 《计算广告》第一部分计算广告关键技术——笔记

热门文章

  1. 《云原生入门级开发者认证》学习笔记之云原生架构总览
  2. Spring Cloud Gateway Session
  3. Android studio中出现keeps stopping现象
  4. 计算机毕业设计JAVA企业售后服务管理系统mybatis+源码+调试部署+系统+数据库+lw
  5. 《地球概论》(第3版)笔记 第四章 地球运动的地理意义
  6. WEP 加密的工作原理和安全缺陷
  7. 外星人台式机无盘服务器,外星人电脑Aurora R6/Aurora R7无盘无法正常引导解决方案...
  8. win8.1下安装vc6
  9. 基于线性回归对男性体脂率的预测
  10. 查询服务器时显示failbyOEM,java - 使用 Weblogic 12c,给出警告警告日志管理 BEA-170011 该服务器上的 LogBroadcaster 失败 - 堆栈内存溢出...