Mercurial > hg > Database > Alice
diff src/alice/test/codesegment/local/bitonicsort/OddPhase.java @ 211:b8f72b378f18 working
refactor bintonic sort
author | one |
---|---|
date | Wed, 27 Mar 2013 16:39:51 +0900 |
parents | 214a13d5ee31 |
children | b5daccf36104 |
line wrap: on
line diff
--- a/src/alice/test/codesegment/local/bitonicsort/OddPhase.java Wed Mar 27 14:45:59 2013 +0900 +++ b/src/alice/test/codesegment/local/bitonicsort/OddPhase.java Wed Mar 27 16:39:51 2013 +0900 @@ -13,14 +13,6 @@ private Receiver info5 = ids.create(CommandType.PEEK); // sort_count private Receiver info6 = ids.create(CommandType.TAKE); // count - public OddPhase(String key0 ,String key1 ,int index,String key6){ - info0.setKey(key0); - info1 = ids.create(CommandType.TAKE); - info1.setKey(key1,index); - info3.setKey("block_num"); - info5.setKey("sort_count"); - info6.setKey(key6); - } public OddPhase(String key0,String key1,String key2,int index,String key6){ info0.setKey(key0); @@ -36,61 +28,36 @@ @Override public void run() { RangeInfo info = info0.asClass(RangeInfo.class); - int block_num = info3.asInteger(); int sort_count = info5.asInteger(); int count = info6.asInteger(); //System.out.println("count is " +count); - if (info2==null){ - DataList list = (DataList)info1.obj; - if (count > sort_count){ - ods.update("array"+info.range, list, false); - return; - } - Sort.quickSort(list,0,list.table.length-1); - if (!info.lastFlag){ - ods.put(info.range+"f", list.createDataList(0, block_num/2) ,false); - ods.put(info.range+"b", list.createDataList(block_num/2, block_num/2) ,false); - - if (info.range==0){ - //System.out.println("next Even "+info.range+" "+info.range+"f"); - new EvenPhase(info0.key,info.range+"f",count,info6.key); - } else { - //System.out.println("next Even "+info.range+" "+ (info.range-1)+"b"+" "+(info.range)+"f"); - new EvenPhase(info0.key,(info.range-1)+"b",info.range+"f",count,info6.key); - } - } else { - ods.put(info.range+"f",list, false); - ods.put(info.range+"b","dummy"); - //System.out.println("next Even "+info.range+" "+ (info.range-1)+"b"+" "+(info.range)+"f"); - new EvenPhase(info0.key,(info.range-1)+"b",info.range+"f",count,info6.key); - } - - } else { + + int i = info.range; + if (count<sort_count){ DataList list1 = (DataList)info1.obj; DataList list2 = (DataList)info2.obj; - DataList list3 = new DataList(list1.table.length+list2.table.length); - System.arraycopy(list1.table, 0, list3.table, 0, list1.table.length); - System.arraycopy(list2.table, 0, list3.table, list1.table.length, list2.table.length); + Sort.quickSort(list1,0,list1.table.length-1); + Sort.quickSort(list2,0,list2.table.length-1); + DataList.merge(list1,list2); - if (count > sort_count){ - ods.update("array"+info.range, list3, false); - return; - } + ods.flip(info1); + ods.flip(info2); - Sort.quickSort(list3,0,list3.table.length-1); - ods.put(info.range+"f", list3.createDataList(0, block_num/2) ,false); - ods.put(info.range+"b", list3.createDataList(block_num/2, block_num/2) ,false); - - if (info.range==0){ - //System.out.println("next Even2b "+info.range+" "+ info.range+"f"); - new EvenPhase(info0.key,info.range+"f",count,info6.key); - } else { - //System.out.println("next Even2b "+info.range+" "+ (info.range-1)+"b"+" "+info.range+"f"); - new EvenPhase(info0.key,(info.range-1)+"b",info.range+"f",count,info6.key); + + + if (i+2 < SetInfo.array.length){ + String f = (count%2==1) ? SetInfo.array[i] : SetInfo.array[i+1]; + String b = (count%2==1) ? SetInfo.array[i+1] : SetInfo.array[i+2]; + new OddPhase(info0.key, f, b,count,info6.key); } + } else { + ods.put(SetInfo.result[i*2], info1); + ods.put(SetInfo.result[i*2+1], info2); } ods.update(info6.key, count+1); + + } }