Mercurial > hg > Database > Alice
view src/alice/test/codesegment/local/bitonicsort/EvenPhase.java @ 165:4fd7d0caf7e3 working
add no recursive type quick sort
author | sugi |
---|---|
date | Thu, 13 Dec 2012 17:26:05 +0900 |
parents | 9c28131e814f |
children | a3f7f25f884b |
line wrap: on
line source
package alice.test.codesegment.local.bitonicsort; import alice.codesegment.CodeSegment; import alice.datasegment.CommandType; import alice.datasegment.Receiver; public class EvenPhase extends CodeSegment{ private Receiver info0 = ids.create(CommandType.PEEK); // range private Receiver info1; // Array1 private Receiver info2; // Array2 private Receiver info3 = ids.create(CommandType.PEEK); // block_num private Receiver info4 = ids.create(CommandType.PEEK); // last_block_num private Receiver info5 = ids.create(CommandType.PEEK); // sort_count private Receiver info6 = ids.create(CommandType.TAKE); // count public EvenPhase(String key0 ,String key1 ,int index,String key6){ info0.setKey(key0); info1 = ids.create(CommandType.TAKE); info1.setKey("local",key1,index); info3.setKey("block_num"); info4.setKey("last_block_num"); info5.setKey("sort_count"); info6.setKey(key6); } public EvenPhase(String key0,String key1,String key2,int index,String key6){ info0.setKey(key0); info1 = ids.create(CommandType.TAKE); info1.setKey("local",key1,index); info2 = ids.create(CommandType.TAKE); info2.setKey("local",key2,index); info3.setKey("block_num"); info4.setKey("last_block_num"); info5.setKey("sort_count"); info6.setKey(key6); } @Override public void run() { RangeInfo info = info0.asClass(RangeInfo.class); int sort_count = info5.asInteger(); int count = info6.asInteger(); if (info2==null){ DataList list = info1.asClass(DataList.class); if (count > sort_count){ ods.update("local", "array"+info.range, list); return; } ods.put("local", info.range+"f", "dummy"); ods.put("local", info.range+"b", list); //System.out.println("next Odd "+info.range+" "+info.range+"b"+" "+(info.range+1)+"f"); new OddPhase(info0.key,info.range+"b",(info.range+1)+"f",count,info6.key); } else { DataList list1 = info1.asClass(DataList.class); DataList list2 = info2.asClass(DataList.class); DataList list3 = new DataList(); list3.table.addAll(list1.table); list3.table.addAll(list2.table); if (count > sort_count){ ods.update("local", "array"+info.range, list3); return; } int block_num = info3.asInteger(); long t1 = System.currentTimeMillis(); Sort.quickSort(list3.table, 0, list3.table.size()-1); System.out.println(list2.table.size()+" : "+(System.currentTimeMillis()- t1)); if (!info.lastFlag){ ods.put("local", info.range+"f", list3.createDataList(0, block_num/2)); ods.put("local", info.range+"b", list3.createDataList(block_num/2, block_num/2)); //System.out.println("next Odd "+info.range+" "+ info.range+"b"+" "+(info.range+1)+"f"); new OddPhase(info0.key,info.range+"b",(info.range+1)+"f",count,info6.key); } else { int last_block_num = info4.asInteger(); ods.put("local", info.range+"f", list3.createDataList(0, block_num/2)); ods.put("local", info.range+"b", list3.createDataList(block_num/2, last_block_num)); //System.out.println("next Odd "+info.range+" "+ info.range+"b"); new OddPhase(info0.key ,info.range+"b",count,info6.key); } } ods.update("local", info6.key, count+1); } }