使用C++编写的数组元素排序的排名

使用c++编写的数组元素排序的排名

在给定的问题中,我们需要对数组的所有给定元素进行排名,最小的数字具有最小的排名,最大的具有最大的排名。例如,我们还需要根据数字的频率来更改数字的排名 –

Input : 20 30 10Output : 2.0 3.0 1.0Input : 10 12 15 12 10 25 12Output : 1.5, 4.0, 6.0, 4.0, 1.5, 7.0, 4.0Here the rank of 10 is 1.5 because there are two 10s present in the given array now if we assume they both take different ranks i.e. 1 and 2 and we thus divide it within themselves so their rank becomes 1.5 and 1.5.Input : 1, 2, 5, 2, 1, 60, 3Output : 1.5, 3.5, 6.0, 3.5, 1.5, 7.0, 5.0

寻找解决方案的方法

有两种不同的方法来寻找解决方案,它们是 –

暴力方法

在这种方法中,我们将循环,选择任何特定元素,并确定其排名。

示例

#include using namespace std;int main() {   int arr[] = {1, 2, 5, 2, 1, 25, 2}; // given array   int n = sizeof(arr) / sizeof(arr[0]); // size of our given array   float rank[n] = {0}; // our ranking array   for (int i = 0; i < n; i++) {      int r = 1; // the number of elements greater than arr[i]      int s = 1; // the number of elements equal to arr[i]      for (int j = 0; j < n; j++) {         if (j != i && arr[j] < arr[i])            r += 1;            if (j != i && arr[j] == arr[i])            s += 1;      }      rank[i] = r + (float)(s - 1) / (float) 2; // using formula      //to obtain rank of particular element   }   for (int i = 0; i < n; i++) // outputting the ranks      cout << rank[i] << ' ';   return 0;}

输出

1.5 4 6 4 1.5 7 4

该程序的时间复杂度为O(N*N),其中N是现在给定数组的大小;正如你所看到的,我们的时间复杂度不好,因此我们将提高其效率,以更好地适应更高的约束。

立即学习“C++免费学习笔记(深入)”;

高效方法

在这种方法中,我们将采取一个新数组并对其进行排序,因为数组已排序,现在我们知道相同排名的所有元素将在一起,因此现在我们像往常一样对它们进行排名,然后计算特定元素的排名。

示例

#include using namespace std;int main() {   int arr[] = {1, 2, 5, 2, 1, 60, 3}; // given array   int n = sizeof(arr) / sizeof(arr[0]); // size of our given array   float rank[n] = {0}; // our ranking array   int old[n];   for(int i = 0; i < n; i++)   old[i] = arr[i];   sort(arr, arr+n); // sorting the array   int prev = arr[0];   int r = 1; // ranks   int s = 0; // frequency   int tot = 0; // will stack up all the rank contained by an element   map rrank;   for (int i = 0; i < n; i++) {      if(prev == arr[i]) {         s++;         tot += r;      } else {         float now = 0;         now = (float)tot/s; // dividing the ranks equally         rrank[prev] = now;         prev = arr[i];         tot = r;         s = 1;      }      r++;   }   rrank[arr[n-1]] = (float)tot/s;   for (int i = 0; i < n; i++) // outputting the ranks      cout << rrank[old[i]] << " ";   return 0;}

输出

1.5 3.5 6 3.5 1.5 7 5

上述代码的说明

在这种方法中,我们对数组进行排序,然后从头开始对每个元素进行排名(排名从 1 开始)。现在,如果我们的上一个元素等于当前元素,我们就会增加 s 并叠加到我们的排名总和。当我们的元素发生更改时,我们将前面的元素的排名分开,刷新 s 和总计,然后继续我们的代码。

结论

在本文中,我们解决了一个问题来找到数组中所有元素的排名。我们还学习了解决这个问题的C++程序以及解决这个问题的完整方法(正常且高效)。我们可以用其他语言编写相同的程序,例如C、java、python等语言。

以上就是使用C++编写的数组元素排序的排名的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1443612.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 20:22:03
下一篇 2025年12月17日 20:22:08

相关推荐

  • 使用C++找出在第L个和第R个索引之间只有设置位的数字

    在给定的问题中,我们需要找到一个数字的值,该数字在给定的范围L、R之间具有所有的设置位。例如 − Input: L = 1, R = 5Output: 62Explanation: representation of given L and R in binary form is 0..011111…

    2025年12月17日
    000
  • 使用C++编写,找到一个集合上的自反关系的数量

    在本文中,我们将解释在一个集合上找到反身关系的方法。在这个问题中,我们给出一个数字n,以及一个由n个自然数组成的集合,我们必须确定反身关系的数量。 反身关系 – 如果对于集合A中的每个’a’,(a, a)属于关系R,则称关系R是集合A上的反身关系。例如 &#821…

    2025年12月17日
    000
  • 在C编程中,将序列2、6、12、20、30的前N项求和

    要求这个级数的总和,我们首先分析这个级数。 该级数是:2,6,12,20,30… 示例 For n = 6Sum = 112On analysis, (1+1),(2+4),(3+9),(4+16)…(1+12), (2+22), (3+32), (4+42), can be divided i…

    2025年12月17日
    000
  • C程序用于检查一个数是否为素数

    素数是只能被两个数字本身和一整除的数字。一个数的因数是能整除该数的数。 前十个素数的列表是 2,3,5,7,11,13,17,23,29,31。 非质数是合数。合数是可以被两个以上的数整除的数。 如果是质数和合数,则 1 既不是质数也不是合数,因为它只能被自身整除。 如何检查一个数是否为质数或合数 …

    2025年12月17日
    000
  • php数组排序并输出

    PHP中排序数组需根据类型选择函数:1. sort()对索引数组按值升序排序;2. ksort()按键排序关联数组;3. rsort()和arsort()分别对索引和关联数组按值降序排序;4. usort()配合自定义比较函数实现灵活排序,如按学生分数降序排列;所有sort系列函数均修改原数组,输出…

    2025年12月13日
    000
  • 怎么用php排序_PHP数组排序(sort/asort)与数据排序方法

    一、sort函数用于索引数组升序排序,排序后键名重置;二、asort按值升序排列关联数组并保留键值关联;三、ksort按键名升序排序关联数组;四、usort通过自定义比较函数实现复杂排序;五、array_multisort可对多维数组或多个数组同步排序;六、rsort和arsort分别实现索引数组和…

    2025年12月12日
    000
  • php中如何排序数组 php数组排序的几种方法示例

    PHP提供多种数组排序方法,需根据是否保留键值关联、排序依据及数据类型选择。sort()对数组值升序排序并重置键为数字索引,适用于简单数值或字符串排序,使用SORT_NUMERIC可确保数字正确排序。asort()按值升序但保留键,ksort()按键名升序,适用于关联数组;其反向排序分别为arsor…

    2025年12月11日
    100
  • php数组排序的方法_php数组升序和降序排列

    PHP数组排序可通过sort()、asort()、usort()等函数实现,分别用于索引数组升序、关联数组值排序及自定义规则排序,选择依据是数组类型和排序需求。 PHP数组排序,简单来说,就是让数组里的元素按照你想要的顺序排列。无论是数字大小、字母顺序,还是自定义规则,PHP都提供了丰富的函数来实现…

    2025年12月10日
    000
  • PHP怎么排序数组 PHP数组排序的7种方法详解

    php数组排序方法的选择取决于具体需求。1.是否保留键名:需保留时选用asort、arsort、ksort、krsort、natsort、natcasesort、uasort、uksort,否则使用sort、rsort。2.排序依据:基于值用sort、rsort、asort、arsort;基于键名用…

    2025年12月10日 好文分享
    000
  • PHP中如何排序数组?

    在php中可以使用多种方法对数组进行排序。1. 使用sort()、rsort()、asort()、arsort()、ksort()和krsort()等基本函数进行简单排序。2. 对于复杂需求,使用usort()和uasort()进行自定义排序。排序时需注意性能和稳定性。 在PHP中排序数组其实是一件…

    2025年12月10日
    000
  • 如何对PHP数组按数字大小排序?

    php数组按数字大小排序可以使用sort()、rsort()、asort()和arsort()函数。1.sort()函数按升序排列数组。2.rsort()函数按降序排列数组。3.asort()函数按升序排列并保留键值对。4.arsort()函数按降序排列并保留键值对。 对于如何对PHP数组按数字大小…

    2025年12月10日
    000
  • PHP中shuffle怎么随机排序数组?

    在php中,shuffle函数用于随机排序数组。1) 使用方法:直接调用shuffle($array)即可打乱数组顺序。2) 工作原理:利用php内置随机数生成器进行原地操作。3) 注意事项:a) 随机性依赖于php随机数生成器,可用mt_srand提升;b) 大型数组可能影响性能;c) 打乱后不可…

    2025年12月10日
    000
  • 如何对PHP多维数组按特定键排序?

    php多维数组按特定键排序可以通过usort、uasort或array_multisort实现。1) 使用usort或uasort定义比较函数,如按价格排序:usort($products, function($a, $b) { return $a[‘price’] &#82…

    2025年12月10日
    000
  • 如何按键对PHP数组进行升序排序?

    按键对php数组进行升序排序可以使用ksort()或uksort()函数。1) ksort()直接修改原数组,适用于性能要求高的场景。2) uksort()不修改原数组,允许自定义排序逻辑,但性能稍差。3) 排序时需注意数组的有效性和稳定性,处理大数组时考虑高效数据结构。 按键对PHP数组进行升序排…

    2025年12月10日
    000
  • js如何实现数组随机排序 数组随机排序的3种算法

    数组随机排序的实现方法有三种:1. 使用sort()结合math.random(),简单但随机性不均;2. fisher-yates算法,保证完美随机且时间复杂度为o(n);3. 循环遍历交换法,易懂但可能存在概率偏差。若对随机性要求高,推荐使用fisher-yates算法;若要求不高,可选用其他两…

    2025年12月5日 web前端
    000
  • js如何实现数组快速排序 3种快速排序算法实现方案分享

    %ignore_a_1%是一种基于“分而治之”策略的高效排序算法,其核心是选定一个基准值,将数组分为两部分,使得左边元素小于基准值,右边元素大于基准值,然后递归地对左右子数组排序。文章介绍了三种javascript实现方案:1. lomuto分区方案选择最后一个元素为基准,通过指针i划分边界,优点简…

    2025年12月4日 web前端
    000
  • 在Java中如何处理SQLException与数据库操作异常_数据库异常处理实践

    SQLException是Java中处理数据库操作异常的关键,需通过try-with-resources自动管理资源,并利用getMessage()、getSQLState()、getErrorCode()等方法获取详细错误信息,结合分类处理与日志记录提升程序健壮性与可维护性。 在Java中进行数据…

    2025年12月1日 java
    000
  • Word/Int转Real类型方法

    在pl%ignore_a_1%中,real类型广泛应用于浮点数运算。由于word或int类型无法直接参与real类型的数学计算,必须先将其转换为real格式。可通过系统提供的类型转换函数或指令实现数据类型的统一,确保运算正确进行。具体步骤如下: 1、 使用MOVE指令将WORD或INT类型的变量传输…

    2025年12月1日 软件教程
    000
  • excel rank函数排名怎么用 excel rank函数进行排名排序

    答案:Excel中RANK函数可对数据按大小排名,RANK.EQ处理并列排名,RANK.AVG对重复值取平均排名,结合IF可实现分组排名,辅助列与COUNTIF可解决跳号问题。 如果您在处理一组数据并希望根据数值大小对它们进行排名,Excel中的RANK函数可以帮助您快速实现这一目标。通过该函数,您…

    2025年11月28日 软件教程
    000
  • java怎么实现数据库事务管理 保证数据一致性的事务控制方法

    使用事务管理确保数据一致性,首选Spring的@Transactional注解实现声明式事务控制,支持传播行为与隔离级别设置,分布式场景可选Seata或RocketMQ事务消息保障最终一致性。 在Java开发中,保证数据库操作的数据一致性,关键在于正确使用事务管理机制。事务确保一组数据库操作要么全部…

    2025年11月28日 java
    000

发表回复

登录后才能评论
关注微信