// bbs249_20120924.cms by あすかぜ // 2 列目、4 列目をキーとし、クイックソートでテーブルをソートします。 // 編集・再配布は自由です。 function classToInt(x) { x = replace(x, "組", ""); x = replace(x, "無所属", "9999"); return int(x); } function genderToInt(x) { if(x == "男"){ return 1; } if(x == "女"){ return 2; } return 3; } function compare(y1, y2, x) { // 最初に 2 列目を比較する r = classToInt([2,y1]) - classToInt([2,y2]); if(r != 0){ return r;} // 2 列目が等しい場合、4 列目を比較する r = genderToInt([4,y1]) - genderToInt([4,y2]); if(r != 0){ return r;} // 両方とも等しければ 0 を返す return 0; } function swaprow(y1, y2, l, r){ for(x=l; x<=r; x++){ swap([x,y1],[x,y2]); } } function qsort(l, t, r, b, x, d){ y = (t-0)+1; while(y <= b && compare(y,t,x) == 0){ y++; } if(y > b){ return; } if(compare(y,t,x) > 0){ p = y; }else{ p = t; } y1 = t; y2 = b; while(y1 <= y2){ while(!d && compare(y1,p,x) < 0 && y1 <= y2){ y1++; } while(!d && compare(y2,p,x) >= 0 && y1 <= y2){ y2--; } while( d && compare(y1,p,x) >= 0 && y1 <= y2){ y1++; } while( d && compare(y2,p,x) < 0 && y1 <= y2){ y2--; } if(y1 < y2){ if(p == y1){ p = y2; }else if(p == y2){ p = y1; } swaprow(y1,y2,l,r); } } if(t < y2){ qsort(l,t,r,y2,x,d); } if(y1 < b){ qsort(l,y1,r,b,x,d); } } // 引数を省略可能に function qsort(l, t, r, b, x){ qsort(l,t,r,b,x,False); } // 引数を省略可能に function qsort(l, t, r, b){ qsort(l,t,r,b,l,False); } // 2 行目以降ををソートする qsort(1, 2, Right, Bottom, 0, False);