引数に指定された配列をバブルソートで並び替えます。参照引数で戻り値はありません。
- 構文
- bubbleSort( array )
- 引数
- array 必須
- ソートする数値を格納した配列。参照引数。
- 戻り値
プログラム
//////////////////////////////////////////////////
// 【引数】
// array : ソートする数値を格納した配列。参照引数。
// 【戻り値】
//
//////////////////////////////////////////////////
PROCEDURE bubbleSort(Var array[])
REPEAT
DIM flg = FALSE
FOR n = 0 TO UBound(array) - 1
IFB array[n] > array[n+1] THEN
swap(array[n], array[n+1])
flg = TRUE
ENDIF
NEXT
UNTIL !flg
FEND
//////////////////////////////////////////////////
// 【引数】
// inputs : 繰り返す文字列
// multiplier : inputsを繰り返す回数
// 【戻り値】
// inputsをmultiplier回を繰り返した文字列を返します
//////////////////////////////////////////////////
FUNCTION strRepeat(inputs, multiplier)
DIM res = ""
FOR n = 1 TO multiplier
res = res + inputs
NEXT
RESULT = res
FEND
//////////////////////////////////////////////////
// 【引数】
// a : bと交換する値。参照引数。
// b : aと交換する値。参照引数。
// 【戻り値】
//
//////////////////////////////////////////////////
PROCEDURE swap(Var a, Var b)
DIM tmp = a
a = b
b = tmp
FEND
//////////////////////////////////////////////////
// 【引数】
// arrayname : 上限値を求める配列の名前
// dimension : 返す次元を示す整数
// 【戻り値】
// 配列の上限値
//////////////////////////////////////////////////
FUNCTION UBound(arrayname[], dimension = 1)
RESULT = EVAL("RESIZE(arrayname" + strRepeat("[0]", dimension - 1) + ")")
FEND
解説
- 2,10行目
- flgがFALSEになるまで繰り返す。
REPEAT … UNTIL !flg
- 3行目
- 要素の入れ替えを行ったかどうかを代入する変数。入れ替えが行われたらTrue。
DIM flg = FALSE
- 4,9行目
- n=0から配列の要素数-1だけ繰り返す。
FOR n = 0 TO UBound(array) - 1 … NEXT
- 5-8行目
- もし配列のn番目がn+1番目より大きかったらその2つを入れ替え、flgをTRUEにする。
IFB array[n] > array[n+1] THEN swap(array[n], array[n+1]) flg = TRUE ENDIF
使い方
DIM array[] = 8, 20, 2, 22, 17, 30, 14, 4, 25, 5
bubbleSort(array)
FOR item IN array
PRINT item
NEXT
- 結果
2 4 5 8 14 17 20 22 25 30
バブルソート
バブルソートは、ソートを行うアルゴリズムの一つです。リストにおいて隣り合うふたつの要素の大小を比較しながらソートを行います。基本交換法、隣接交換法ともいいます。
最悪計算時間 | \(O(n^{2})\) |
---|---|
最良計算時間 | \(O(n)\) |
平均計算時間 | \(O(n^{2})\) |
アルゴリズム
すべての要素に関して、隣接する要素を比較し大小が逆であれば入れ替える。これを要素数-1回繰り返すことでソートを行います。繰り返しは入れ替えが起こらなくなった時点で中断することができます。
- 最初に、配列の先頭要素をカレントポインタに設定します。
- カレントポインタが配列の末尾まで到達するまで、以下の処理を繰り返します。
- カレントポインタが指す要素と、カレントポインタの次の要素の大小関係を比較します。
- もし、大小関係が逆であれば、2つの要素を交換します。
- カレントポインタが配列の末尾まで到達したら、ソートが完了です。
この記事は役に立ちましたか?
ご協力ありがとうございます。
関連記事
- QSORT関数 (スクリプト関数)
- 配列の中身をソートします。
- small (自作関数)
- 配列の中で小さい方から数えた順位の値を求めます。
- shakerSort (自作関数)
- 引数に指定された配列を シェーカーソート で並び替えます。
- gnomeSort (自作関数)
- 引数に指定された配列を ノームソート で並び替えます。
- insertionSort (自作関数)
- 引数に指定された配列を 挿入ソート で並び替えます。
- shellSort (自作関数)
- 引数に指定された配列を シェルソート で並び替えます。
- heapSort (自作関数)
- 引数に指定された配列を ヒープソート で並び替えます。
- quickSort (自作関数)
- 引数に指定された配列を クイックソート で並び替えます。
- shearSort (自作関数)
- 引数に指定された配列を シェアソート で並び替えます。
- Sort.Header プロパティ (Excel)
- 最初の行にヘッダー情報が含まれるかどうかを指定します。