对可比值的数组进行排序

时间:2017-04-13 06:15:34

标签: arrays algorithm sorting

我正在开发一个使用基于键的索引的组件,该索引可以对引用对象集合中的项目进行排序(高级字典)。

当键由一个单独的项组成时,比较机制很好地排序,但是到了这个时候,我添加了一个维度的复杂性,我失去了排序的精度。

var key1 = new Key{Values=new[]{23,56}};
var key2 = new Key{Values=new[]{23,58}};

// i will be -1 because the first component of key1 is equal to 
// the first component of key2
var i = key1.Compare(key2);

为了获得密钥的排序因子,我使用了密钥的单个组件的比较的代数添加。 我觉得我没有做到这一点,因为当组件的价值具有更高的差异时,订单不受尊重

var key1 = new Key{Values=new[]{23,92}};
var key2 = new Key{Values=new[]{33,45}};

// i will be 0 because the first component of key1 is less than 
// the first component of key2, but the second component of 
// key1 is more than the second component of key2, while I'd
// expect a -1
// -1 + 1 = 0
var i = key1.Compare(key2);

排序发生错误,因为密钥的整个组成部分被认为是同等重要的,而我想按位置对比较因子进行排名

有没有人遇到过同样的情况?我错过了什么吗?

注意:请注意,在我的示例中,比较的值是数字,但实际上对象类型是可变的,但所有IComparable

2 个答案:

答案 0 :(得分:0)

比较第一个组件:如果结果不为零则返回它。否则,比较第二个组件,返回结果。

这称为词典顺序。

答案 1 :(得分:0)

你可以基本遍历所有字段并在比较器函数中逐个进行比较,就像这样;

// Assuming A and B have same length 
bool comparator( const A[],  const B[]){
   for(i = 0 ; i < A.length; i++)
   if ( A[i] <= B[i])
   continue;
   else
   return true;

  return false;

}