【发布时间】:2016-07-16 12:43:07
【问题描述】:
我想对一个数组进行排序,如下所示:
mat[0] = 300
mat[1] = 200
mat[2] = 360
mat[3] = 230
mat[4] = 290
排名取决于上面的数组(最大数量获得排名 1 等):
rank[0] = 2
rank[1] = 5
rank[2] = 1
rank[3] = 4
rank[4] = 3
如何在不移动任何排序算法的数组的情况下进行排名 或通过不同的输入:
mat[0] = 400
mat[1] = 100
mat[2] = 220
mat[3] = 230
mat[4] = 50
排名是:
rank[0] = 1
rank[1] = 4
rank[2] = 3
rank[3] = 2
rank[4] = 5
我将如何在 C 中做到这一点?
【问题讨论】:
-
你试过了吗?你能告诉我们你的代码吗?
-
我不想使用 C 中的内置函数
-
@Marievi 我没有任何代码,因为我只知道对数组进行排序以移动值,而不是在为它们分配新排名时将它们留在同一个地方。
-
考虑从你的数组构造一棵树,一次一个元素。树的每个节点都是它的值。它的广度和深度决定了它的等级。您可以使用树排序 (en.wikipedia.org/wiki/Tree_sort)。当您读出树的节点时,您会按排名顺序 (martinbroadhurst.com/cpp-sorting.html#tree-sort) 取回元素。