zoukankan      html  css  js  c++  java
  • 21. 名次计算算法

    算法内容:

     一个元素在一个序列中的名次,是所有比它小的元素个数加上在它左边出现的与它相同的元素个数。

    代码:

     1 template <typename T>
     2 void the_rank(const T* a, int n, T* r) {
     3     for (int i = 0; i < n; ++i) {
     4         r[i] = 0;
     5     }
     6     
     7     for (int i = 1; i < n; ++i) {
     8         for (int j = 0; j < i; ++j) {
     9             if (a[j] <= a[i]) {
    10                 ++r[i];
    11             } else {
    12                 ++r[j];
    13             }
    14         }
    15     }
    16 }

    代码解释:

    先将 r 数组初始化,所有元素的名次均为 0。再进行比较,比较时以 i 元素为基准,将 i 前面的元素依次与 i 元素进行比较,若它们的值小于等于 i 元素,则 i 元素的名次增加 1,否则将另一个元素的名次增加 1。注意, i 元素是从 1 号下标开始(即数组的第二个元素), j 是从头开始,一直到 i 为止。

    算法中有一个地方需要详细解释。一般思路可能是,i 元素从头开始,j 元素也从头开始,并且 i ,j 均到 n 结束。在这种情况下,对于每个 i ,我们都要进行 n - 1 次比较,这样就会产生错误:每一对元素比较了两次。实际上,固定当前元素,将它前面的元素依次与它比较,就能够避免上述错误。

  • 相关阅读:
    网页轮播图案例
    表单
    表格标签的使用
    HTML5标签2
    HTML标签
    外边距
    h5css产品模块设计
    mouseenter 和mouseover的区别
    动画函数封装
    jQuery 插件
  • 原文地址:https://www.cnblogs.com/Hello-Nolan/p/12355309.html
Copyright © 2011-2022 走看看