
単純挿入ソート法の要素の比較回数、移動回数についての問題
『単純挿入ソート法は、シャトルソート法とも呼ばれ、挿入とシフトを用いるソートである。
下図(添付図)はこのソート法の1ステップを示している。
配列a[0],…,a[n-1]があって、a[i]より前の部分がソートされている。
ここで、a[i]の値をwとする。 a[0],…,a[i-1]の 部分で、w が入るべき位置を探す。
この位置をj とする。配列の範囲 a[j],…,a[j-1]をa[j+1],…,a[i] ヘシフト する。最後に、wをa[j]に格納する。
このような操作を、最後まで繰り返す。
以下の問に答えよ。
問(1)~(3) 省略
問(4)単純挿入ソート法で要素の比較回数のオーダーを答えなさい。ただし、配列の要素数を n とする。
問(5)単純挿入ソート法で要素の移動回数のオーダーを答えなさい。ただし、 配列の要素数を n とする。』
問(1)~(3)は単純挿入ソート法で配列を昇順にソートするC言語で記述されたプログラムに関する問題なのですがそちらは解けました。
問(4)は比較回数のオーダーを S とすると、最悪の場合 n(n-1)/2 回 比較を行う必要があるので、S=n(n-1)/2
問(5)は移動回数のオーダーを T とすると、最悪の場合 n(n-1)/2 回 移動を行う必要があるので、T=n(n-1)/2
と考えているのですが自信がありません。
そもそもここで問われているオーダーとは回数のことをいってるのか、そうではないのかが分かりません。
どなたか説明していただけますと大変助かります。解答以外にもこの問題に関連することに対してのアドバイスなどがありましたら答えてくださると嬉しいです。
時間がなくて少し焦っています。どうか何卒よろしくお願いします。

A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
実際に乱数を使って行ったところでは、比較=移動回数の関係があり、処理時間と比較、移動回数は比例する関係にあって、添付図に示した Gnuplot から、O(x^2) の関係にあります。
正確なカーブフィッティング値は Gnuplot によればf(x) = (1.92557e-9)*x^2
となりました。
/* GCC on MacOSX
----- sort.dat ファイル -----
n, sec, comp, move
-----------------------
1000 0.003 248309 248303
2000 0.011 1006037 1006029
4000 0.034 3973471 3973463
8000 0.126 15946938 15946931
16000 0.492 63930736 63930726
*/
#include <stdio.h>
#include <stdlib.h> /* srand(), rand() */
#include <time.h> /* time() */
#include <sys/time.h> /* gettimeofday() */
#define N 20000
void sort(int n, int data[]);
int main(void)
{
int i, n, data[N];
struct timeval tv;
struct timezone tz;
double before, after;
srand((unsigned)time(NULL));
for(i = 0; i < N; i++)
data[i] = rand() % N;
fprintf(stderr, "n? ");
scanf("%d", &n);
gettimeofday(&tv, &tz);
before = (double)tv.tv_sec + (double)tv.tv_usec * 1.0e-6;
sort(n, data);
gettimeofday(&tv, &tz);
after = (double)tv.tv_sec + (double)tv.tv_usec * 1.0e-6;
fprintf(stderr, "%d: %.3f sec\n", n, after - before);
return 0;
}
void sort(int n, int data[])
{
int i, j, temp;
int comp = 0, move = 0;
for (i = 1; i < n; i++) {
temp = data[i];
if (comp++, data[i-1] > temp) {
j = i;
do {
move++, data[j] = data[j-1];
j--;
} while (comp++, j > 0 && data[j-1] > temp);
move++, data[j] = temp;
}
}
printf("comp= %d move= %d\n", comp, move);
}

No.4
- 回答日時:
こんばんは。
nの2乗とnの1乗を比べた場合、nを大きくしていくと
圧倒的にnの2乗の方が速く大きくなります。
このとき、nの2乗から見ればnの1乗は無視できるほどの値ということになります。
こういう場合、nの2次式は「nの2乗のオーダーで大きくなる」と言うのです。
nの2次式 an^2+bn+c はn^2から見れば bn も c も無視できる大きさとということになり、
係数 a , b , c の大きさにかかわらずオーダーは nの2乗と考えます。
No.2
- 回答日時:
「比較回数のオーダー」とか「移動回数のオーダー」とか書いてあるんだから, 当然オーダーは「回数」のことをいっているにきまってますよ
. それ以外の何だと思えるのでしょうか?No.1
- 回答日時:
問(4)は,比較回数が n(n-1)/2 回なので,計算量(オーダ)は nの2乗
問(5)も,移動回数が n(n-1)/2 回なので,計算量(オーダ)は nの2乗
http://oshiete.goo.ne.jp/qa/6071509.html の私の過去の回答ANo.3
http://oshiete.goo.ne.jp/qa/6115906.html の私の過去の回答ANo.1
http://oshiete.goo.ne.jp/qa/4001070.html の私の過去の回答ANo.1
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 結合セルのソートについて 5 2022/04/22 11:57
- その他(パソコン・スマホ・電化製品) 挿入ソートとマージソートを比較すると,挿入ソートのほうが計算量は少なく,効率的なアルゴリズムである。 1 2022/11/30 17:31
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- Java Java配列の問題を教えてください。 乱数で20個出力し、最大、最小、合計、平均を求め、更に昇順にソ 3 2023/07/10 18:32
- Excel(エクセル) 重複しているか否かをソートせずに判断する方法ありますか? 2 2022/07/06 21:16
- その他(プログラミング・Web制作) pythonにおける単方向リストの実装について 4 2022/07/13 12:34
- その他(ビジネススキル・経営ノウハウ) 在庫管理のこの問題が分かりません。どなたか解説お願いします 2 2022/04/18 18:35
- 数学 在庫管理のこの問題が分かりません。どなたか解説お願いします 4 2022/04/18 22:19
- 数学 在庫管理のこの問題が分かりません。どなたか解説お願いします 2 2022/04/18 22:21
- 数学 時々、回答者の見識に疑念を抱いてしまうんです。私だって本当は皆様のことを疑いたくはありません。しかし 2 2022/11/27 12:23
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
System.IO.Directory.GetFiles...
-
Fortran77で多次元配列を並び替...
-
Double型ソート方法
-
ArrayListのソートについて
-
シフトJISのソート
-
SQLで検索結果の出力件数指定?
-
ソートのアルゴリズム
-
リストビューのソートが2回必要
-
多次元配列のソート方法
-
qsort/クイックソートについて
-
C# ArrayListを二次元配列のよ...
-
構造体配列の並べ替え
-
こんなCGIを知りませんか?
-
配列の問題
-
リスト構造のソートで悩んでま...
-
jqgrid で 2から3 階層以上の j...
-
画像掲示板用のPHPかCGIスクリ...
-
C# DataTableの行をソートしてD...
-
sortの優先キーについて(スプレ...
-
DataGridViewでのソート制御
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
System.IO.Directory.GetFiles...
-
C# DataGridView のヘッダーセ...
-
VB.NETでファイル名順にファイ...
-
C# DataTableの行をソートしてD...
-
VBA基本構文の作り方 2列の...
-
ファイル名「1.jpg ~10.jpg~...
-
あるディレクトリ内のファイル...
-
GridViewで列のソートを無効に...
-
C言語・要素除去
-
excel VBA の条件をつけての列...
-
Excelですべての組合せ(重複組...
-
VBScriptで配列のソートをする...
-
配列の問題
-
ブック.csvを開かずに他のブッ...
-
2次元配列を複数項目でソートし...
-
構造体配列のソート
-
listboxの並び替え
-
構造体のリストをソートしたい。
-
リスト構造のソートで悩んでま...
-
文字列をソートする方法
おすすめ情報