本ページには広告が含まれています。
引数に指定された配列をノームソートで並び替えます。
- 構文
- gnomeSort( array )
- 引数
- array 必須
- ソートする数値を格納した配列。参照引数。
- 戻り値
プログラム
//////////////////////////////////////////////////
// 【引数】
// array : ソートする数値を格納した配列。参照引数。
// 【戻り値】
//
//////////////////////////////////////////////////
PROCEDURE gnomeSort(Var array[])
DIM n = 1
DIM num = UBound(array)
WHILE n < num + 1
IFB array[n-1] <= array[n] THEN
n = n + 1
ELSE
swap(array[n], array[n-1])
n = n - 1
IF n = 0 THEN n = n + 1
ENDIF
WEND
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行目
- nに1を代入。
DIM n = 1
- 3行目
DIM num = UBound(array)
- 4,12行目
WHILE n < num + 1 … WEND
- 6行目
- 次に進む。
n = n + 1
- 8-10行目
- 配列のn-1番目とn番目を交換する。
swap(array[n], array[n-1]) n = n - 1 IF n = 0 THEN n = n + 1
使い方
DIM array[] = 8, 20, 2, 22, 17, 30, 14, 4, 25, 5
gnomeSort(array)
FOR item IN array
PRINT item
NEXT
- 結果
2 4 5 8 14 17 20 22 25 30
ノームソート
ノームソートはソートアルゴリズムの一つです。入力配列を1つずつ前方に走査しながら隣接する要素の大小関係を比較して、大小関係が逆であれば交換するという操作を繰り返すことでソートを行います。
最悪計算時間 | \(O(n^{2})\) |
---|---|
最良計算時間 | \(O(n)\) |
アルゴリズム
- 最初に、配列の先頭要素をカレントポインタに設定します。
- カレントポインタが配列の末尾まで到達するまで、以下の処理を繰り返します。
- カレントポインタが指す要素と、カレントポインタの前の要素の大小関係を比較します。
- もし、大小関係が逆であれば2つの要素を交換し、カレントポインタを1つ前に戻します。
- もし、大小関係が正しければカレントポインタを1つ進めます。
- カレントポインタが配列の末尾まで到達したら、ソートが完了です。
関連記事
- QSORT関数 (スクリプト関数)
- QSORT関数は、配列の中身をソートする関数です。戻値はありません。昇順・降順・UNICODE文字比較 昇順・UNICODE文字比較 降順・自然順ソート 昇順・自然順ソート 降順のいずれかを指定することができます。
- small関数 (自作関数)
- 配列の中で小さい方から数えた順位の値を求めます。
- bubbleSort関数 (自作関数)
- 引数に指定された配列を バブルソート で並び替えます。
- shakerSort関数 (自作関数)
- 引数に指定された配列を シェーカーソート で並び替えます。
- insertionSort関数 (自作関数)
- 引数に指定された配列を 挿入ソート で並び替えます。
- shellSort関数 (自作関数)
- 引数に指定された配列を シェルソート で並び替えます。
- heapSort関数 (自作関数)
- 引数に指定された配列を ヒープソート で並び替えます。
- quickSort関数 (自作関数)
- 引数に指定された配列を クイックソート で並び替えます。
- shearSort関数 (自作関数)
- 引数に指定された配列を シェアソート で並び替えます。
- Sort.Header プロパティ (Excel)
- 最初の行にヘッダー情報が含まれるかどうかを指定します。