当前位置:编程学习 > JAVA >>

排序方法,有空的来讨论一下下?

排序:
假设,在屋子里面,有n个物品,每个物品都有俩属性,一个是id,一个是pos(pos指的是该物品在屋子里的位置,位置可以任意挪动,当然,你也可以看成index来对待)。
n个物品,都是根据id的大小来进行排列的
①.那么假设,初始有5个物品,其排列状态为:[A、B、C、D、E]
②.现在,人为的对调了C、E的位置,被发现后,需要调整排序,恢复原来的排序位置

一般排序,我们仅仅遍历下所有物品,对比下id大小,就可以进行排序了。
但这样做的话,数据量大的时候,就不是太好用了。
如,客户端发送整理的命令,服务端收到后,开始排序,到整理好,再发给客户端这段时间内,客户端处于一个卡停的状态。

大伙讨论下?能否做成只对那些顺序动过的物品,进行排序?这样的做法,好不好?
或者有更好的排序方法? --------------------编程问答--------------------
先顶一个 --------------------编程问答-------------------- 这个根据算法的规则是可以直接对调,前提是你知道对调双方的信息,但一旦排列数多的话就变的很复杂!!所以顺序排序是比较好的方法 --------------------编程问答-------------------- 我大概写了个模拟的程序,大家看看,来给排下序...

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 楼 Li_894389175 的回复:
这个根据算法的规则是可以直接对调,前提是你知道对调双方的信息,但一旦排列数多的话就变的很复杂!!所以顺序排序是比较好的方法

2楼的哥们,说的在理,但我就想弄明白下,有没有更好的排序方法呢,效率更高效点的呢... --------------------编程问答-------------------- 额,大神们还没有空么?来给点指导? --------------------编程问答-------------------- 目前暂时学习的知识有限,现在还不能给你解答,Sorry --------------------编程问答--------------------
引用 5 楼 wgy2750 的回复:
额,大神们还没有空么?来给点指导?

大伙讨论下?能否做成只对那些顺序动过的物品,进行排序?这样的做法,好不好?
这个如果只对顺序动过的物品进行排序,那么就需要对移动过的主动进行标记,这样就是主动去做这样故意让其出错的事了。
如果按照你这样思路,确实能快速的恢复,但是前提是必须预先知道错误即将发生并进行标记。
那样的话我感觉备份数据其实更合适。
另外排序的话数据小的话冒泡排序法,数据大的话快速排序和堆栈排序,这个应该是数据结构里面的。
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,