One simple ranking method counts how many values are higher than the selected value.

Program

Play the program to choose a different row and recompute its rank.

selected_index
rank_by_count.f90
Replay: real traced execution (multi-file project)
program rank_by_count_demo
    implicit none
    integer :: values(4)
    integer :: selected_index
    integer :: selected_score
    integer :: i
    integer :: higher_count
    integer :: rank

    values = [14, 20, 17, 12]
    selected_index = 3
    selected_score = values(selected_index)
    higher_count = 0
    do i = 1, 4
        if (values(i) > selected_score) higher_count = higher_count + 1
    end do
    rank = higher_count + 1
    print '(I0, 1X, I0, 1X, I0)', selected_index, selected_score, rank
end program rank_by_count_demo
program rank_by_count_demo
    implicit none
    integer :: values(4)
    integer :: selected_index
    integer :: selected_score
    integer :: i
    integer :: higher_count
    integer :: rank

    values = [14, 20, 17, 12]
    selected_index = 1
    selected_score = values(selected_index)
    higher_count = 0
    do i = 1, 4
        if (values(i) > selected_score) higher_count = higher_count + 1
    end do
    rank = higher_count + 1
    print '(I0, 1X, I0, 1X, I0)', selected_index, selected_score, rank
end program rank_by_count_demo
program rank_by_count_demo
    implicit none
    integer :: values(4)
    integer :: selected_index
    integer :: selected_score
    integer :: i
    integer :: higher_count
    integer :: rank

    values = [14, 20, 17, 12]
    selected_index = 4
    selected_score = values(selected_index)
    higher_count = 0
    do i = 1, 4
        if (values(i) > selected_score) higher_count = higher_count + 1
    end do
    rank = higher_count + 1
    print '(I0, 1X, I0, 1X, I0)', selected_index, selected_score, rank
end program rank_by_count_demo
  1. values ← [14, 20, 17, 12]

    10values = [14, 20, 17, 12]11selected_index = 3
    values this step[14, 20, 17, 12]values
  2. selected_index ← 3

    10values = [14, 20, 17, 12]11selected_index = 312selected_score = values(selected_index)
    values this step3selected_index
  3. selected_score ← 17

    11selected_index = 312selected_score = values(selected_index)13higher_count = 0
    values this step17selected_score17values(3)
  4. higher_count ← 0

    12selected_score = values(selected_index)13higher_count = 014do i = 1, 4
    values this step0higher_count
  5. i ← 1

    13higher_count = 014do i = 1, 415    if (values(i) > selected_score) higher_count = higher_count + 1
    values this step1i
  6. if (values(i) > selected_score) higher_count = higher_count + 1

    14do i = 1, 415    if (values(i) > selected_score) higher_count = higher_count + 116end do
    values this step.false.values(1) > selected_score
  7. i ← 2

    13higher_count = 014do i = 1, 415    if (values(i) > selected_score) higher_count = higher_count + 1
    values this step2i
  8. higher_count ← 1

    14do i = 1, 415    if (values(i) > selected_score) higher_count = higher_count + 116end do
    values this step1higher_count.true.values(2) > selected_score
  9. i ← 3

    13higher_count = 014do i = 1, 415    if (values(i) > selected_score) higher_count = higher_count + 1
    values this step3i
  10. if (values(i) > selected_score) higher_count = higher_count + 1

    14do i = 1, 415    if (values(i) > selected_score) higher_count = higher_count + 116end do
    values this step.false.values(3) > selected_score
  11. i ← 4

    13higher_count = 014do i = 1, 415    if (values(i) > selected_score) higher_count = higher_count + 1
    values this step4i
  12. if (values(i) > selected_score) higher_count = higher_count + 1

    14do i = 1, 415    if (values(i) > selected_score) higher_count = higher_count + 116end do
    values this step.false.values(4) > selected_score
  13. rank ← 2

    16end do17rank = higher_count + 118print '(I0, 1X, I0, 1X, I0)', selected_index, selected_score, rank
    values this step2rank1higher_count
  14. print '(I0, 1X, I0, 1X, I0)', selected_index, selected_score, rank

    17    rank = higher_count + 118    print '(I0, 1X, I0, 1X, I0)', selected_index, selected_score, rank19end program rank_by_count_demo
    output3 17 2
    values this step3selected_index17selected_score2rank
  1. values ← [14, 20, 17, 12]

    10values = [14, 20, 17, 12]11selected_index = 1
    values this step[14, 20, 17, 12]values
  2. selected_index ← 1

    10values = [14, 20, 17, 12]11selected_index = 112selected_score = values(selected_index)
    values this step1selected_index
  3. selected_score ← 14

    11selected_index = 112selected_score = values(selected_index)13higher_count = 0
    values this step14selected_score14values(1)
  4. higher_count ← 0

    12selected_score = values(selected_index)13higher_count = 014do i = 1, 4
    values this step0higher_count
  5. i ← 1

    13higher_count = 014do i = 1, 415    if (values(i) > selected_score) higher_count = higher_count + 1
    values this step1i
  6. if (values(i) > selected_score) higher_count = higher_count + 1

    14do i = 1, 415    if (values(i) > selected_score) higher_count = higher_count + 116end do
    values this step.false.values(1) > selected_score
  7. i ← 2

    13higher_count = 014do i = 1, 415    if (values(i) > selected_score) higher_count = higher_count + 1
    values this step2i
  8. higher_count ← 1

    14do i = 1, 415    if (values(i) > selected_score) higher_count = higher_count + 116end do
    values this step1higher_count.true.values(2) > selected_score
  9. i ← 3

    13higher_count = 014do i = 1, 415    if (values(i) > selected_score) higher_count = higher_count + 1
    values this step3i
  10. higher_count ← 2

    14do i = 1, 415    if (values(i) > selected_score) higher_count = higher_count + 116end do
    values this step2higher_count.true.values(3) > selected_score
  11. i ← 4

    13higher_count = 014do i = 1, 415    if (values(i) > selected_score) higher_count = higher_count + 1
    values this step4i
  12. if (values(i) > selected_score) higher_count = higher_count + 1

    14do i = 1, 415    if (values(i) > selected_score) higher_count = higher_count + 116end do
    values this step.false.values(4) > selected_score
  13. rank ← 3

    16end do17rank = higher_count + 118print '(I0, 1X, I0, 1X, I0)', selected_index, selected_score, rank
    values this step3rank2higher_count
  14. print '(I0, 1X, I0, 1X, I0)', selected_index, selected_score, rank

    17    rank = higher_count + 118    print '(I0, 1X, I0, 1X, I0)', selected_index, selected_score, rank19end program rank_by_count_demo
    output1 14 3
    values this step1selected_index14selected_score3rank
  1. values ← [14, 20, 17, 12]

    10values = [14, 20, 17, 12]11selected_index = 4
    values this step[14, 20, 17, 12]values
  2. selected_index ← 4

    10values = [14, 20, 17, 12]11selected_index = 412selected_score = values(selected_index)
    values this step4selected_index
  3. selected_score ← 12

    11selected_index = 412selected_score = values(selected_index)13higher_count = 0
    values this step12selected_score12values(4)
  4. higher_count ← 0

    12selected_score = values(selected_index)13higher_count = 014do i = 1, 4
    values this step0higher_count
  5. i ← 1

    13higher_count = 014do i = 1, 415    if (values(i) > selected_score) higher_count = higher_count + 1
    values this step1i
  6. higher_count ← 1

    14do i = 1, 415    if (values(i) > selected_score) higher_count = higher_count + 116end do
    values this step1higher_count.true.values(1) > selected_score
  7. i ← 2

    13higher_count = 014do i = 1, 415    if (values(i) > selected_score) higher_count = higher_count + 1
    values this step2i
  8. higher_count ← 2

    14do i = 1, 415    if (values(i) > selected_score) higher_count = higher_count + 116end do
    values this step2higher_count.true.values(2) > selected_score
  9. i ← 3

    13higher_count = 014do i = 1, 415    if (values(i) > selected_score) higher_count = higher_count + 1
    values this step3i
  10. higher_count ← 3

    14do i = 1, 415    if (values(i) > selected_score) higher_count = higher_count + 116end do
    values this step3higher_count.true.values(3) > selected_score
  11. i ← 4

    13higher_count = 014do i = 1, 415    if (values(i) > selected_score) higher_count = higher_count + 1
    values this step4i
  12. if (values(i) > selected_score) higher_count = higher_count + 1

    14do i = 1, 415    if (values(i) > selected_score) higher_count = higher_count + 116end do
    values this step.false.values(4) > selected_score
  13. rank ← 4

    16end do17rank = higher_count + 118print '(I0, 1X, I0, 1X, I0)', selected_index, selected_score, rank
    values this step4rank3higher_count
  14. print '(I0, 1X, I0, 1X, I0)', selected_index, selected_score, rank

    17    rank = higher_count + 118    print '(I0, 1X, I0, 1X, I0)', selected_index, selected_score, rank19end program rank_by_count_demo
    output4 12 4
    values this step4selected_index12selected_score4rank
selected row `selected_score` copies the score from the chosen row.
higher count Every higher value moves the selected score one rank lower.
rank `higher_count + 1` gives first place when no values are higher.