排序:
假设,在屋子里面,有n个物品,每个物品都有俩属性,一个是id,一个是pos(pos指的是该物品在屋子里的位置,位置可以任意挪动,当然,你也可以看成index来对待)。
n个物品,都是根据id的大小来进行排列的
①.那么假设,初始有5个物品,其排列状态为:[A、B、C、D、E]
②.现在,人为的对调了C、E的位置,被发现后,需要调整排序,恢复原来的排序位置一般排序,我们仅仅遍历下所有物品,对比下id大小,就可以进行排序了。
但这样做的话,数据量大的时候,就不是太好用了。
如,客户端发送整理的命令,服务端收到后,开始排序,到整理好,再发给客户端这段时间内,客户端处于一个卡停的状态。大伙讨论下?能否做成只对那些顺序动过的物品,进行排序?这样的做法,好不好?
或者有更好的排序方法?

解决方案 »

  1.   

    我大概写了个模拟的程序,大家看看,来给排下序...import java.util.*;
    public class SortSample
    {
    private ArrayList<InnerItem> list; /**
     * 物品,内部类
     * 
     */
    class InnerItem
    {
    int id;
    int pos;
    } /**
     * 初始化10个物品,pos
     * 
     */
    private ArrayList<InnerItem> setItems()
    {
    list = new ArrayList<InnerItem>();
    Random rand = new Random(); int length = 10;
    boolean[] boolID = new boolean[length];
    boolean[] boolPOS = new boolean[length];
    int id = 0;
    int pos = 0; // 这个for loop主要是为了添加不重复的id和pos
    for(int i = 0; i < length; i++)
    {
    InnerItem item = new InnerItem(); do
    {
    id = rand.nextInt(length);
    }
    while (boolID[id]);
    boolID[id] = true;
    item.id = id;

    do
    {
    pos = rand.nextInt(length);
    }
    while (boolPOS[pos]);
    boolPOS[pos] = true;
    item.pos = pos; list.add(item);
    //System.out.println("id = " + id);
    //System.out.println("num = " + pos);
    }

    return list;
    } //test
    public static void main (String[] args)
    {

    System.out.println(new SortSample().setItems());
    }
    }
      

  2.   

    目前暂时学习的知识有限,现在还不能给你解答,Sorry