好像跟一般的排序是一样的啊,只是比较方式不同。用快速排序嘛,遇到不相关的就先放到一个list里去。
这里有讲快速排序的:http://blog.csdn.net/v_JULY_v/article/details/6116297

解决方案 »

  1.   

    快速排序的关键是要选取一个数作为中间节点,但是现在的问题是选取中间节点以后,如果碰到一个数与中间节点的比较结果是无关(即无法比较),那么他应该放在中间节点的左边还是右边,放在左边就永远没机会和右边的的elements比较了,反之也无法和左边的elements比较,非常可能存在漏比的行为
      

  2.   

    快速排序的关键是要选取一个数作为中间节点,但是现在的问题是选取中间节点以后,如果碰到一个数与中间节点的比较结果是无关(即无法比较),那么他应该放在中间节点的左边还是右边,放在左边就永远没机会和右边的的elements比较了,反之也无法和左边的elements比较,非常可能存在漏比的行为
    哦,我理解错误,以为只要比较一次,无法比较,就可以踢出去了。
    这样的话,如果没有更好的办法,我认为还是可以先选择全部放到左边(或者右边),然后将中间点和这个点存到字典里,如果最后这个点比较完都不相关,再跟中间点以右(左)比较一遍,这样还是减少了一些比较次数的。
      

  3.   

    快速排序的关键是要选取一个数作为中间节点,但是现在的问题是选取中间节点以后,如果碰到一个数与中间节点的比较结果是无关(即无法比较),那么他应该放在中间节点的左边还是右边,放在左边就永远没机会和右边的的elements比较了,反之也无法和左边的elements比较,非常可能存在漏比的行为
    哦,我理解错误,以为只要比较一次,无法比较,就可以踢出去了。
    这样的话,如果没有更好的办法,我认为还是可以先选择全部放到左边(或者右边),然后将中间点和这个点存到字典里,如果最后这个点比较完都不相关,再跟中间点以右(左)比较一遍,这样还是减少了一些比较次数的。没大看懂,是吧中间点和这个点的比较结果放到字典里吗,如果比完左右,都无关的话应该放在哪里呢?
      

  4.   

    快速排序的关键是要选取一个数作为中间节点,但是现在的问题是选取中间节点以后,如果碰到一个数与中间节点的比较结果是无关(即无法比较),那么他应该放在中间节点的左边还是右边,放在左边就永远没机会和右边的的elements比较了,反之也无法和左边的elements比较,非常可能存在漏比的行为
    哦,我理解错误,以为只要比较一次,无法比较,就可以踢出去了。
    这样的话,如果没有更好的办法,我认为还是可以先选择全部放到左边(或者右边),然后将中间点和这个点存到字典里,如果最后这个点比较完都不相关,再跟中间点以右(左)比较一遍,这样还是减少了一些比较次数的。没大看懂,是吧中间点和这个点的比较结果放到字典里吗,如果比完左右,都无关的话应该放在哪里呢?
    你不是说 "如果其中一个element与其他elements都没有关系,那么他可以存在于这个list的任何地方" ?
      

  5.   

    事先要明确比较的规则。
    你的情况比较类似扑克牌的比较,先把能比较的分别放成一堆,比如,先按花色分成四堆(大小王不考虑)。这时候,你要有花色的比较规则,比如黑桃大于红桃。然后,再对分成的小堆中的数据进行排序。最后,组合到一块。这就是基数排序:http://www.cnblogs.com/CSharpSPF/p/3242214.html