・検索とソートのまとめ
※ 7/24は前期ラストで時間内課題作成(フローチャートとプログラム)テーマは「ソート」
ソート:プログラムにしよう(再掲載)
・配列の値は初期化で与えてOK
例:int[] val = {80,20,10,40,50,60}; //元の1次元配列
・ソート結果の表示を追加すること
int[] val = {80,20,10,40,50,60}; //元の配列
for(int i = 0; i < val.Length - 1; i++) { //カウンタiで要素数-1回繰返す
for(int j = 0; j < val.Length - 1; j++) { //カウンタjで要素数-1回繰返す
if(val[j] > val[j + 1]) { //隣と降順になっていたら
var temp = val[j]; //退避してから
val[j] = val[j + 1]; //交換する
val[j + 1] = temp;
}
}
}
foreach (int i in val) { //配列の全要素について繰返す
Console.WriteLine(i);
}
提出フォロー:ソート:アルゴリズムを改良しよう
・このアルゴリズムでは「すでに整列されている(に近い)」状態からでも同じ時間がかかってしまう。 ・それは途中で「もう交換しなくてもよい」状態になっても終わらないから ・よって、フラグを作って、カウントjの繰返し開始前にオフ(交換してない)としておこう ・そして、交換したらフラグをオンにしよう ・で、カウントjの繰返しが終わった時、フラグがオフのままなら出来上がっているのでbreakで抜けよう
作成例
int[] val = {80,20,10,40,50,60}; //元の配列
for(int i = 0; i < val.Length - 1; i++) { //カウンタiで要素数-1回繰返す
bool f = false; //【追加】交換フラグをオフに
for(int j = 0; j < val.Length - 1; j++) { //カウンタjで要素数-1回繰返す
if(val[j] > val[j + 1]) { //隣と降順になっていたら
var temp = val[j]; //退避してから
val[j] = val[j + 1]; //交換する
val[j + 1] = temp;
f = true; //【追加】交換フラグをオンに
}
}
if(!f) { //【以下追加】交換フラグがオフ?
break; //今回1度も交換していない=整列済になっているので終わる
}
}
foreach (int i in val) { //配列の全要素について繰返す
Console.WriteLine(i);
}
