テーブルをクイックソートするには?
未経験者として、今年入社したばかりの超初心者です。
javascriptを始めて、3ヶ月です。
「テーブルをクイックソートする」課題が出たのですが、アルゴリズムデータ構造が分かっておらずとても困っています。
スクリプトは以下です。
どうか、アドバイスをお願いします!!
<html>
<head>
<meta http-equiv="Content-Language" content="ja">
<meta http-equiv="Content-Type" content="text/html; charset=shift_jis">
<title>ソート</title>
<script language ="JavaScript">
<!--
var x=new Array();
var nodeArray=new Array();
var n;
function TableSort() {
var tbd1 = document.getElementById("tbd1"); //ドキュメントにある特定のIdを持つオブジェクトを示す
//HTMLタグのID属性で指定したもの
var tre = tbd1.getElementsByTagName("tr") ; // タグを取得する
n = tre.length ; // 行の数
for(i=0;i<n;i++) {
if (document.getElementById("tr"+i)) {
// alert(document.getElementById("tr"+i));
nodeArray[i]=document.getElementById("tr"+i);
}
}
}
function show() {
tbody=document.getElementById('tbd1');
for(i=0;i<n;i++) {
tbody.removeChild(nodeArray[i]); //子供のノードオブジェクトを削除
}
for(i=0;i<n;i++) {
tbody.appendChild(nodeArray[i]); //子供のノードオブジェクトを追加
}
}
function stringSort(0) {
start = x[0];
end = x[n-1];
for(i=0;i<n;i++) {
xval=nodeArray[i].childNodes[k].firstChild.nodeValue; //ソート対象となるデータをxの配列に設定している
x[i]=xval;
}
quickSort(x,start,end);
show();
}
function quickSort(x,start,end){
// var data = Math.floor((x[start]+x[end])/2); //基準値(平均を適用)小数点以下切捨て
var i = start;
var j = end;
var e;
e = x[start];
while(true){
while(x[i] < e) i++; //基準値より大きい値を先頭から探す
while(x[j] > e) j--; //基準値より小さい値を末尾から探す
if( i >= j ) break; //両者が交錯していたら抜ける
var n =x[i]; //交錯していなければ値を交換
x[i] =x[j];
x[j] =n;
i++; // 交換した一つ後に添え字を進める
j--; // 交換した一つ前に添え字を進める
}
if(start < i-1) quickSort(x,start,i-1); // 基準値より小さいグループの再起処理
if(j+1 < end) quickSort(x,j+1 ,end); // 基準値より大きいグループの再起処理
}
//-->
</script>
</head>
<body onload="TableSort();stringSort(0)" bgcolor="pink">
<!--<img src="img/59.gif">-->
<tr><th><big><strong>数字をソートしよう!!</strong></big></th></tr>
<br>
<br><p> ↓click here!!</p>
<table border=1 id="tb1" width=200 bgcolor="white">
<thead >
<tr>
<th><button onclick="stringSort(0)">push!!</button></th>
</tr>
</thead>
<tbody>
<tr><td align=center>48</td></tr>
<tr><td align=center>24</td></tr>
<tr><td align=center>36</td></tr>
<tr><td align=center>18</td></tr>
<tr><td align=center>52</td></tr>
</tbody>
</table>
</body>
</html>
補足
データバインディングではなく,VBScript でディレクトリの内容を取得し,JavaScript に回しています。onCkick などはその時に JavaScript で属性を追加しています。 繰り返し処理が多いので,振り直すというのは難しいです。