【问题标题】:Rank an unsorted list of integers in an array in C在C中对数组中未排序的整数列表进行排名
【发布时间】:2021-05-19 08:30:01
【问题描述】:

我正在做一个作业,其中我有一个未排序形式的整数数组,我的任务是根据每个整数的值对其进行排名,其中最大值将获得第一名,最小值将获得 n -rank(在 20 个整数的数组中,最低值的排名为 20)。我不能使用二维数组,因为我们还没有学习它们。所以我只能使用 库。我正在努力编写一个可以解决问题的算法。

我不是在这里寻求解决方案,因此请不要发布代码,而是在此处发布有关如何构建算法或如何思考的一些提示。提前感谢您的任何想法和建议!

【问题讨论】:

  • 你能对数组进行排序吗?可以原地整理吗?该问题是否有效率要求?你能用第二个数组来保持排名吗(因为我不确定你为什么首先提到一个二维数组;第二个相同大小的数组就可以了)?相同的值会发生什么情况,在这种情况下,排名可能会被跳过,或者最低的排名不会出现?
  • hmmm 很多问题:你应该对排名做什么?打印、存储或......您是否允许更改数组中元素的顺序,例如对数组进行排序?
  • 你可能想看看这个:Sorting Algorithm。浏览那里给出的流行排序算法列表并单独阅读它们......
  • 我要稍后打印,但我不担心打印部分。一旦我找到排名并用排名替换值,我就可以打印每个值。但我首先关心的是排名算法:-)。我会检查排序算法,谢谢!
  • 你是对的,我必须将排名存储在 anther 数组中。我在下面发布解决方案:

标签: arrays c


【解决方案1】:

首先将排名设置为零。要查找第 i 个元素的排名,您可以迭代数组的所有元素。如果一个元素大于第 i 个元素,则增加排名。如果一个元素等于第 i 个元素,则当且仅当该元素在第 i 个元素之前时增加排名。

这是一些查找第 i 个元素排名的伪代码

* i = "index of element to rank"
* j = 0
* rank = 0
* while j < array-size do:
      * if array[j] > array[i] do: rank = rank + 1
      * if array[j] == array[i] and j < i do: rank = rank + 1
      * j = j + 1
* print rank

【讨论】:

    【解决方案2】:

    所以这是带有 2 x for 循环的代码的一部分,我在其中遍历一组结果并将每个结果与所有其他结果进行比较,然后计算有多少值小于或等于该值。我对每个值都这样做。然后我记录另一个数组中每个值的点数,最高点变为最低点。谢谢大家的投入!抱歉,我无法发布完整的问题,因为这会是不好的做法。

    > for(l=0; l<no_students; l++){
    >         points=0;
    >         for(i=0; i<no_students; i++){
    >             if(array[l]<=array[i]){
    >                 points++;
    >             }
    >             rank[l]=points;
    >         }
    >                     j++;
    >     }
    

    【讨论】:

    • 根据数据量和执行频率,这可能效率低下。通常,您需要使用已排序的数据。似乎只需调用qsort 也可以解决此问题。
    • 我同意你的观点,但我只是一个初学者,还在学习 C,所以在我的课程中,我们会分配作业来测试和练习我们所学的知识。我知道代码效率对于程序执行、时间、cpu 使用非常重要,我希望能够随着时间的推移而提高。在这个练习中,我们有 3 个值可以使用 :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-06
    • 2018-06-06
    • 2012-11-04
    • 2021-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多