学校の課題なのですが、10回テストをして各テストの点数を低い順に並び替えるという問題です。そこで、処理手順を作成しなくてはならないのですが、(1)合計点、最高点、最低点を初回(先頭)の点数で初期化する。(2)並び替え前のデータを表示する。(3)バブルソートで配列を並び替える。(4)並び替え後のデータを表示する。といった感じです。(開始)→から始まってループとかを使ってやるみたいですけど、どうも流れ図に表せません・・・。特に、(3)がよくわかりませんので、そのへんを詳しく知りたいです。よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

バブルソートは隣接交換法のことです。

参考URLには流れ図ものっています。
隣接交換法を実行すると、左の方にある最大値データが隣接交換の繰り返しで、一番早く右端に到着します。水中の大きな泡ほど水面に早く達するのになぞらえてバブルソート(泡ソート)と呼んでいます。

参考URL:http://www2.osk.3web.ne.jp/~a0mediac/Argoa/B96a0 …
    • good
    • 0
この回答へのお礼

おかげさまで無事作成することができましたσ(^^)
ありがとうございます!

お礼日時:2002/04/12 20:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

Qaltだけランダムに並び替えできません。

はじめまして、お力をお貸しください。

3個のバナー(今後増減あり)をリロードするたびにランダムで
順番を入れ替えて表示したいと思っています。重複ナシです。
3個中3個すべてを表示して順番だけ入れ替えたいです。

上記に(1)画像(2)リンク(3)altの3点セットをランダム順番入れ替え
したいのですが、下記スクリプトだとaltだけ順番が入れ替わりません。

altも順番入れ替えできる用にしてもらえませんでしょうか。
お願いします。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=Shift_JIS">
<title>バナーランダム順番入れ替え</title>
<script type="text/javascript">
<!--
function bannerclass(address,src){
this.src = src;
this.address = address;
}

function getBannerAddress(){
var i = 0;
var tempAddressList = new Array();

while(document.getElementById('banner' + i)){
tempAddressList[i] = new bannerclass(document.getElementById('banner' + i).parentNode.href,document.getElementById('banner' + i).src);
i++;
}

return tempAddressList;
}

function setBannerAddress(tempBannerData){
var bannernum = tempBannerData.length;
var i;

for (i = 0; i < bannernum; i++){
var rndNum = Math.floor(Math.random() * bannernum);
var tempData = tempBannerData[rndNum];
tempBannerData[rndNum] = tempBannerData[i];
tempBannerData[i] = tempData;
}

for (i = 0; i < bannernum; i++){
document.getElementById('banner' + i).parentNode.href = tempBannerData[i].address;
document.getElementById('banner' + i).src = tempBannerData[i].src;
}
}

function setBanner(){
var tempdata = getBannerAddress();

setBannerAddress(tempdata);
}

if (window.addEventListener) window.addEventListener("load", setBanner, false);
else if (window.attachEvent) window.attachEvent("onload", setBanner);
else window.onload = setBanner;

// -->
</script>
</head>
<body>

<p>
<a href="address1.html"><img src="001.gif" id="banner0" alt="banner1"></a>
</p>
<p>
<a href="address2.html"><img src="002.gif" id="banner1" alt="banner2"></a>
</p>
<p>
<a href="address3.html"><img src="003.gif" id="banner2" alt="banner3"></a>
</p>

</body>
</html>

はじめまして、お力をお貸しください。

3個のバナー(今後増減あり)をリロードするたびにランダムで
順番を入れ替えて表示したいと思っています。重複ナシです。
3個中3個すべてを表示して順番だけ入れ替えたいです。

上記に(1)画像(2)リンク(3)altの3点セットをランダム順番入れ替え
したいのですが、下記スクリプトだとaltだけ順番が入れ替わりません。

altも順番入れ替えできる用にしてもらえませんでしょうか。
お願いします。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transition...続きを読む

Aベストアンサー

こんにちは。こちらでいかがでしょう?
---
function bannerclass(address,src,alt){
this.address = address;
this.src = src;
this.alt = alt;
}

function getBannerAddress(){
var i = 0;
var tempAddressList = new Array();
while(document.getElementById('banner' + i)){
tempAddressList[i] = new bannerclass(
document.getElementById('banner' + i).parentNode.href,
document.getElementById('banner' + i).src,
document.getElementById('banner' + i).alt
);
i++;
}
return tempAddressList;
}

function setBannerAddress(tempBannerData){
var bannernum = tempBannerData.length;
var i;
for (i = 0; i < bannernum; i++){
var rndNum = Math.floor(Math.random() * bannernum);
var tempData = tempBannerData[rndNum];
tempBannerData[rndNum] = tempBannerData[i];
tempBannerData[i] = tempData;
}
for (i = 0; i < bannernum; i++){
document.getElementById('banner' + i).parentNode.href = tempBannerData[i].address;
document.getElementById('banner' + i).src = tempBannerData[i].src;
document.getElementById('banner' + i).alt = tempBannerData[i].alt;
}
}
(以下省略)
---

こんにちは。こちらでいかがでしょう?
---
function bannerclass(address,src,alt){
this.address = address;
this.src = src;
this.alt = alt;
}

function getBannerAddress(){
var i = 0;
var tempAddressList = new Array();
while(document.getElementById('banner' + i)){
tempAddressList[i] = new bannerclass(
document.getElementById('banner' + i).parentNode.href,
document.getElementById('banner' + i).src,
document.getElementById('banner' + i).alt
);
i++;
}
return tem...続きを読む

Q0から99の数字をランダムに並び替えたいのですが・・

0から99までの数字をランダムに並び替えて、

 89 42 19 35 2 94 12 ....

のような数字の列を得たいのですが、どうすればよいでしょうか?一見、簡単そうなのですが、つまずいています。


最初思いついたのは次の方法です。

以下を i=0 から i=99になるまで繰り返す。

(1) tmp = (int) 100 * Math.random(); と 0~99の乱数を発生させる
(2) a[0]~a[i-1]の中にxと同じ値が無ければ a[i] = x;と代入。同じものがあったら (1)に戻る。
(3) i = i+1;

この方法だと、i=98の時は、ほとんどの場合「a[0]~a[i-1]の中にxと同じ値がある」ことになってしまい、iが増えるごとにスピードが落ちます。
100個くらいの数字なら良いのですが、100000000個の数字だと非効率な気がします。

みなさんどうなさっているのでしょうか?

Aベストアンサー

0~99までの数列を配列に作り、それをシャッフルすればよいのでは?
まあ完全なシャッフルというのも難しいっちゃ難しいんですが。

参考URL:http://ray.sakura.ne.jp/tips/shaffle.html,http://www.hyuki.com/d/200510.html#i20051023140000

QJunitテストでvoid戻り値メッソドをテストする方法

お疲れ様です。
Junitテストでvoid戻り値メッソドをテストする方法について質問が
あります。
戻り値なしのvoidメソッドをassertで検査したい場合どうしたら
いいでしょうか。
ただexceptionとかが無く動いたら良いだけです。

お答えお願いします。

Aベストアンサー

failを使ってはどうでしょう?

public void test1() {
try {
testingMethod(); // テスト対象
} catch(Exception e) {
fail(e.getMessage());
}
}

Q単体テストのテストケースにて引数に値を入れたいです

使用言語:JAVA言語
単刀直入ですが、djunitでの単体テストのメソッドの引数に値を設定したいですがどうすればいいのでしょうか?

引数がString型

Messageクラス
public class Messages {

public String getMessage(String message) {
return message ;
}

}

テストケース作成
public void testGetMessage001() {
System.out.println("[testGetMessage001]");

Messages messages = new Messages();

System.out.println(messages.getMessage("Hello"));
}

とやれば、インスタンス生成してgetmessageメソッドにHelloが入ります。

問題は次の場合で仮にAxxクラスとして
Public class Axx{
    Public void getAxx(HttpServletRequest request){
~処理~
}
}

引数に(クラス名 オブジェクト名?)
この場合、テストケースに
Axx axx = new Axx();
System.out.println(messages.getAxx("????"));

のようにMessageクラスと同じようにできるのでしょうか?

それとも別の方法でHttpServletRequest requestに値をセットできる方法があるのでしょうか?

よろしくお願い致します。

使用言語:JAVA言語
単刀直入ですが、djunitでの単体テストのメソッドの引数に値を設定したいですがどうすればいいのでしょうか?

引数がString型

Messageクラス
public class Messages {

public String getMessage(String message) {
return message ;
}

}

テストケース作成
public void testGetMessage001() {
System.out.println("[testGetMessage001]");

Messages messages = new Messages();

System.out.println(messages....続きを読む

Aベストアンサー

HttpServletRequest はインターフェイスなので、それを実装したクラスのインスタンスを getAxx メソッドに渡してやる必要が有りますね。

現実的には下記のどちらかの方法になるかと思います。

a. テスト用に HttpServletRequest を実装したクラスを作る。
b. EasyMock, JMock などのモックオブジェクト生成ライブラリを使う。

djUnit の Virtual Mock Objects は、実装されているメソッドの動作を変えられますが、インターフェイスからの実装クラスを生成することは出来なかったかと。

Qバブルソート

int a[] = {8,45,15,90,62,73,22}をバブルソートを使用して、降順で並べ替える。
以下の説明では、配列の要素数(ここでは7)をNとしている。

(1) a[N-1] と a[N-2] を比較し、a[N-1] が a[N-2] より大きい場合は、a[N-1] と a[N-2] を入れ替える。
  同様に a[ j] が a[ j-1] より大きければ、a[ j] と a[ j-1] を入れ替える。
  この操作を、j=N-1からiまで繰り返す。ただし、iは(1)の処理回数を表す値である。(初回を0とする)

(2) (1)を i=0 から N-2 まで繰り返す。

(3) 以下の<実行例>を参考に、配列aのようその各値を標準出力する。

<実行例>
90 73 62 45 22 15 8

という問題なのですが、どうやってもうまく並び替えられません。
a[N-1] の処理はいらないのではないのですか?
どのようにプログラムを書いたらいいのか教えて下さい。
あつかましいですが、できたら解説付きでお願いします。

int a[] = {8,45,15,90,62,73,22}をバブルソートを使用して、降順で並べ替える。
以下の説明では、配列の要素数(ここでは7)をNとしている。

(1) a[N-1] と a[N-2] を比較し、a[N-1] が a[N-2] より大きい場合は、a[N-1] と a[N-2] を入れ替える。
  同様に a[ j] が a[ j-1] より大きければ、a[ j] と a[ j-1] を入れ替える。
  この操作を、j=N-1からiまで繰り返す。ただし、iは(1)の処理回数を表す値である。(初回を0とする)

(2) (1)を i=0 から N-2 まで繰り返す。

(3) 以下の<実行...続きを読む

Aベストアンサー

問題文がごちゃごちゃしすぎていますね。

まず、バブルソートは正式(?)には隣接交換法といいます。隣同士を順番に交換していきます。
一番泥臭く考えれば、右端から左端へ何回移動すれば整列が完了するでしょうか。
最も悪条件は左端に一番小さいデータがあって、これを右端へ移動させると考えると(N-1)回であることはすぐわかりますね。つまり、隣同士を比較しながらの右から左への移動(比較回数はN-1回)が(N-1)回で整列が完了する事になります。

ところが、これには無駄があります。右から左へ動いていくとき、必ず一番大きいデータが左端へ移動していきます。1回目は1番大きいデータ、2回目は2番目に大きいデータという風にです。従って、一番左に行ったデータは次からは比較の対象からはずしていいのです。(余談ですが大きい泡ほど早く水面に達するという現象になぞらえて、泡ソート=バブルソートというあだ名がついています。)

従ってfor文の2重ループが次の様になる事はお判りですね。

for( )…比較の対象範囲の左端を管理するループ(i=0~N-2)
      (最低でも2個ないと比較できないので、N-1でなく,N-2)
  for( )…1回ごとの比較の左端を管理するループ(j=(N-2)~i)
       (これはj-- である事に注意が必要です)

>a[N-1] の処理はいらないのではないのですか?

いります。問題の書き方がよくないだけです。
a[N-1] と a[N-2] の比較からはじめて 一般形としてa[ j] と a[ j-1] の比較をする。逆転があれば入れ替える。という風に読まないといけないのです。
わかりにくい問題文で苦労させられているご様子、同情します。

問題文がごちゃごちゃしすぎていますね。

まず、バブルソートは正式(?)には隣接交換法といいます。隣同士を順番に交換していきます。
一番泥臭く考えれば、右端から左端へ何回移動すれば整列が完了するでしょうか。
最も悪条件は左端に一番小さいデータがあって、これを右端へ移動させると考えると(N-1)回であることはすぐわかりますね。つまり、隣同士を比較しながらの右から左への移動(比較回数はN-1回)が(N-1)回で整列が完了する事になります。

ところが、これには無駄があります。...続きを読む


人気Q&Aランキング

おすすめ情報