一个排名算法的问题!!

benniaoyaofei 2009-05-04 04:10:46
比如有三组数字(1100,1400,1300)
按照由低到高排名是1,3,2
这些数字是个数组
怎么得到排名?
...全文
162 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
vwxyzh 2009-05-04
  • 打赏
  • 举报
回复
            int[] pri = { 1100, 1400, 1300 };
int[] keys = (int[])pri.Clone();

关于重复项似乎比较麻烦,这个方法会有点问题
我姓区不姓区 2009-05-04
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 vwxyzh 的回复:]
受不了ls,类库都有现成的方法
C# codeint[] keys={1100,1400,1300};int[] values={1,2,3};
Array.Sort(keys, values);foreach(intiteminvalues)
{
Console.WriteLine(item);
}

[/Quote]
而且如果有重复项……

int[] keys = { 1100, 1400, 1300, 1100 };
int[] values = { 1, 2, 3, 4 };
Array.Sort(keys, values);
foreach (int item in values)
{
Console.WriteLine(item);
}
我姓区不姓区 2009-05-04
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 vwxyzh 的回复:]
受不了ls,类库都有现成的方法
C# codeint[] keys={1100,1400,1300};int[] values={1,2,3};
Array.Sort(keys, values);foreach(intiteminvalues)
{
Console.WriteLine(item);
}

[/Quote]
这样连keys数组也会重新排序的,楼主要求keys不能动
gomoku 2009-05-04
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 vwxyzh 的回复:]
受不了ls,类库都有现成的方法

C# code
int[] keys = { 1100, 1400, 1300 };
int[] values = { 1, 2, 3 };
Array.Sort(keys, values);
foreach (int item in values)
{
Console.WriteLine(item);
}
[/Quote]
这个比较好:)
vwxyzh 2009-05-04
  • 打赏
  • 举报
回复
受不了ls,类库都有现成的方法
            int[] keys = { 1100, 1400, 1300 };
int[] values = { 1, 2, 3 };
Array.Sort(keys, values);
foreach (int item in values)
{
Console.WriteLine(item);
}

LemIST 2009-05-04
  • 打赏
  • 举报
回复
public static int[] GetRank(int[] input)
{
ArrayList pairs = new ArrayList();
int pos = 0;
foreach (int value in input)
{
pairs.Add(new RankPair(value, pos++));
}
pairs.Sort();
int[] ranks = new int[input.Length];
int rank = 1;
foreach (RankPair pair in pairs)
{
ranks[(pair as RankPair).position] = rank++;
}
return ranks;
}

public class RankPair : IComparable
{
public int position = 0;
public int value = 0;

public RankPair(int value, int pos)
{
position = pos;
this.value = value;
}



#region IComparable Members

public int CompareTo(object obj)
{
return value.CompareTo((obj as RankPair).value);
}

#endregion
}
gomoku 2009-05-04
  • 打赏
  • 举报
回复

static void Main()
{
int[] r = GetRanks(new int[] { 1, 3, 2, 4, 9 });
///// r = { 1, 3, 2, 4, 5 }
}

static int[] GetRanks(int[] array)
{
List<Point> pairs = new List<Point>();
for(int i=0; i<array.Length; i++)
{
pairs.Add( new Point(i, array[i]));
}
pairs.Sort(delegate(Point a, Point b) { return a.Y - b.Y; });

int[] ranks = new int[array.Length];
for (int i = 0; i < pairs.Count; i++)
{
ranks[pairs[i].X] = i;
}

return ranks;
}

投机取巧用Point来存整数和它的位置,如果不是整数可自己定义个数据类型。
我姓区不姓区 2009-05-04
  • 打赏
  • 举报
回复

int[] pri = { 1100, 1400, 1300 };
int[] temp = new int[pri.Length];
Array.Copy(pri, temp, pri.Length);
Array.Sort(temp);
int[] rank = new int[pri.Length];
for (int i = 0; i < rank.Length; i++)
rank[i] = Array.IndexOf(pri, temp[i]) + 1;

foreach (int i in pri)
Console.WriteLine(i);
foreach (int i in rank)
Console.WriteLine(i);
benniaoyaofei 2009-05-04
  • 打赏
  • 举报
回复
例如 pri 1100 1400 1300
rank 1 3 2
pri位置不变,得到rank
zhangbin4362 2009-05-04
  • 打赏
  • 举报
回复
没懂你说什么??有点不对啊~!!

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧