Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 使用预定义的排序值列表对对象进行排序_Algorithm_Sorting - Fatal编程技术网

Algorithm 使用预定义的排序值列表对对象进行排序

Algorithm 使用预定义的排序值列表对对象进行排序,algorithm,sorting,Algorithm,Sorting,我想知道什么是按照与不同数组相同的顺序对对象数组进行排序的最快方法 下面是C#中的一个示例: class-MyClass { 公共MyClass(int值) { 这个值=值; } int值; 公共整数值 { 获取{返回值;} 设置{this.value=value;} } } 静态列表分类价值列表; 静态列表对象列表; 按与sortedValuesList相同的顺序排序objectList的最快方法是什么? 可能有多个对象具有相同的值 我已经有了简单的算法可以做到这一点,但它是O(n^2),需

我想知道什么是按照与不同数组相同的顺序对对象数组进行排序的最快方法

下面是C#中的一个示例:

class-MyClass
{
公共MyClass(int值)
{
这个值=值;
}
int值;
公共整数值
{
获取{返回值;}
设置{this.value=value;}
}
}
静态列表分类价值列表;
静态列表对象列表;
按与sortedValuesList相同的顺序排序objectList的最快方法是什么? 可能有多个对象具有相同的值

我已经有了简单的算法可以做到这一点,但它是O(n^2),需要额外的内存

编辑: 我想不清楚我想做什么。 假设用户在屏幕上看到销售人员的数据网格。他可以按他想要的任何列对它们进行排序。现在,用户单击一个按钮,就会显示一张客户表。每位顾客都推荐一位销售人员。我想根据先前数据网格中销售人员的顺序对客户列表进行排序


这只是一个理论问题,因为我不需要更多的表现。我只是想知道,当您需要使用查找表来比较对象时,是否有一些很好的排序算法。

以下是我非常简单的解决方案:

类程序
{
静态列表分类价值列表;
静态列表对象列表;
静态void Main(字符串[]参数)
{
//生成一些测试数据;
随机=新随机();
objectList=新列表();
sortedValuesList=新列表();
对于(int i=0;i<10;i++){
MyClass a=新的MyClass(random.Next()%20);
添加(a);
如果(!sortedValuesList.包含(a.Value))
sortedValuesList.Add(a.Value);
}
//洗牌id
对于(int i=sortedValuesList.Count-1;i>0;i--){
int n=随机。下一个(i+1);
int tempId=sortedValuesList[n];
sortedValuesList[n]=sortedValuesList[i];
sortedValuesList[i]=临时ID;
}
Console.WriteLine(“参考列表:”);
for(int i=0;i

首先,帮自己一个忙,使用列表的通用版本,因此将objectList定义为

static List<MyClass> objectList;
静态列表objectList;

但是,在任何一种情况下,由于列表都是对实际对象的引用的集合,而且您似乎希望两个列表的顺序相同,为什么不将一个列表分配给另一个呢?我错过了什么

听起来你想要一张地图:

static Dictionary<int, MyClass> sortedObjectList
静态字典分类对象列表
将其分解为以下步骤:

  • 浏览你的sortedValuesList,从值->索引位置构建一张地图;这是O(n日志n)
  • 检查对象并在临时字段中添加索引(同样,O(n logn))
  • 按临时字段对列表进行排序(也是O(n log n))
  • 总算法,O(n logn)


    或者,如果您不想使用“暂存”字段,您可以每次通过映射查找排序键,查找总体O(n(log n)^2)

    排序列表不包含实际对象。它只包含用于排序的值。
    static List<MyClass> objectList;
    
    static Dictionary<int, MyClass> sortedObjectList