final int NUMBER_OF_RANDOM_DATA = 500; final String DATA_FILE_NAME = "RandomData.txt"; final String SORTED_DATA_FILE_NAME = "SortedData.txt"; final int DIAMITER = 5; ArrayList nums = new ArrayList(); int i = 0; // ソート回数。drawする度にカウントアップ void setup(){ //ランダムなデータの読み込み loadData(); //ディスプレイウインドウの設定 size(NUMBER_OF_RANDOM_DATA,NUMBER_OF_RANDOM_DATA); background(0,0,0); frameRate(60); stroke(255,0,0); } void loadData(){ String lines[] = loadStrings(DATA_FILE_NAME); for(String val : lines){ nums.add(int(val)); } } void onePassOfBubbleSort(){ for ( int j = NUMBER_OF_RANDOM_DATA - 1; j > i; j--){ if ( nums.get(j) < nums.get(j-1) ){ int temp = nums.get(j); nums.set(j,nums.get(j-1)); nums.set(j-1,temp); } } } void draw(){ if (i < NUMBER_OF_RANDOM_DATA - 1){ //ソート1パス onePassOfBubbleSort(); //結果をプロット println("Count " + i); clear(); for (int k=0; k < nums.size(); k++) { ellipse(k,nums.get(k),DIAMITER,DIAMITER); } ++i; } if ( i == NUMBER_OF_RANDOM_DATA -1 ){ //ソート結果の書き出し String[] data = new String[NUMBER_OF_RANDOM_DATA]; for(Integer count = 0; count < NUMBER_OF_RANDOM_DATA; ++count){ data[count] = nums.get(count).toString(); } saveStrings(SORTED_DATA_FILE_NAME,data); println("Sorted Data written to " + SORTED_DATA_FILE_NAME); exit(); } }