2016-12-10 43 views
0

你好,我知道如何couting排序工作,如何实现它,但是有可能实现它在一个有3个属性,需要计数排除整个DisjointSet在一个特定属性的类。计数排序为一组

如果是这样,可以说我有这个类:

class myStructure { 
public: 
    int m_id = -1; 
    myStructure* m_parent = NULL; 
    int m_sortie = -1; 
    int m_echeance = -1; 

    myStructure() {} 

    myStructure(int id, myStructure* parent, int sortie, int echeance) 
     : m_id(id), m_parent(parent), m_sortie(sortie), m_echeance(echeance) 
    { } 
}; 

我怎样才能实现对m_echance计数排序。 谢谢

+0

计数排序只需要一个属性进行排序,在你的类中,所有的属性都是公共的,因此你可以对它进行排序。那么是什么问题,详细解释,你需要代码还是其他的东西 –

回答

0

当然,你可以应用计数排序。 它适用于任何可以用整数映射的字段。一般来说,如果值的范围(在你的情况m_echeance)很小,应该使用排序。 下面是高层次的方法做但─

比方说,你对象存储在数组A []

范围m_echeance的是[0,R-1]

  1. 做一个计数阵列。

  2. 循环遍历数组A来计算具有不同m_echeance值的对象的频率。

like count [A [i] - > m_echeance + 1] ++;

  1. 获取count数组的累积频率。

  2. 根据累积频率复制辅助数组中的对象。

  3. 将对象从辅助数组复制回原始数组。

希望它有帮助!