• 締切済み

シェルソートの計算量

nから降順で並べたソートをシェルソートで並び替える場合、計算量はどうなるのかを求めるプログラム(C言語)を教えてください。

みんなの回答

回答No.6

#include <time.h> Sort(); //プロトタイプ main() { time_t stime,etime; double dtime; stime = time(NULL); Sort(); etime = time(NULL); dtime = difftime(etime,stime); } dtimeに秒単位でかかった時間が入ります。 Sortからは余計な処理(画面表示、入力など)は抜くこと。 これでどう?

  • hpsk
  • ベストアンサー率40% (48/119)
回答No.5

シェルソートに関しては,アルゴリズムは理解されているように見受けられますので,「書いてみたものこここがうまくいかない」という質問のほうが良いと思います. もっとも,適当に検索すればそのものズバリのものがいくらでも転がっていますが. 時間獲得の方法に関しては,#4の方のおっしゃる通り環境(OS,コンパイラ)を書いていただかないと何ともいえません.

akuirejia
質問者

補足

シェルソートに関しては完成、かつ正常に動きましたので大丈夫です。 OSはWindowsXP、コンパイラはbcc32.exeです。環境によって方法等も変わってくるものなのでしょうか?

回答No.4

環境によるのかな…… そのプログラム(関数)の実行前後でtimeを取って、その差を見るのは出来ない?

akuirejia
質問者

補足

やはり環境によって違いが出てきますか(^^;

回答No.3

補足を2点ほどお願いします。 (1)シェルソートのプログラムその物は既にあるのですよね? (2)No.2の補足に「具体的な数列を与えてそれをソートするためにかかった時間」とありますが、求めたいのは時間でよいですか?(比較回数/交換回数ではなく。)

akuirejia
質問者

補足

>(1)シェルソートのプログラムその物は既にあるのですよね? 一応、それらしき物は作っていますが、できればお願いします >(2)No.2の補足に「具体的な数列を与えてそれをソートするためにかかった時間」とありますが、求めたいのは時間でよいですか?(比較回数/交換回数ではなく。) 時間のみです。 かなりお手数をおかけしていますが、よろしくお願いします

  • hpsk
  • ベストアンサー率40% (48/119)
回答No.2

うーん,やはりいまいちよくわかりません. とはいってもいくつかの予測はつきますが. まず,「シェルソートの計算量を求める」と言ったばあい,具体的な数列を与えてそれをソートするためにかかった時間や比較回数,交換回数を出力する,ということではなくて. 最悪の場合nに対してこれだけの時間がかかる,平均的にはこれだけの時間がかかる,というこを数学的に示すことを指します. 質問者さまのおっしゃりたいことは前者だと思いますが,いかがでしょう? > 降順に並べた整数の列をシェルソートで並び替えた 文字通りに解釈すると 「降順に並んでるんだったらソートしなくてもいいじゃん」 となります. 整数の列を,降順にソートするのですか?

akuirejia
質問者

補足

>「シェルソートの計算量を求める」と言ったばあい,>具体的な数列を与えてそれをソートするためにかかっ>た時間や比較回数,交換回数を出力する,ということ>ではなくて.最悪の場合nに対してこれだけの時間が >かかる,平均的にはこれだけの時間がかかる,という>こを数学的に示すことを指します. すいません。すっかり勘違いしてしまいました。「具体的な数列を与えてそれをソートするためにかかっ>た時間」を求めるプログラムです。「シェルソートの計算量を求める」ですと最悪計算量O(n^2)になってしまいますね。。 > 降順に並べた整数の列をシェルソートで並び替えた >文字通りに解釈すると「降順に並んでるんだったらソ>ートしなくてもいいじゃん」となります. うまく説明できないので例を・・・ 5 4 3 2 1 ↓並び替え 1 2 3 4 5 こういった形で結果を導き出したいのですが。。。 どうでしょうか?

  • hpsk
  • ベストアンサー率40% (48/119)
回答No.1

> 計算量はどうなるのか シェルソートの最悪計算量は O(n^2) です. それを求めるプログラムを作るのですか? > nから降順で並べたソートをシェルソートで並び替える というのもいまいち意味がわかりません.

akuirejia
質問者

補足

すいません。かなり言葉が足りていないようです。 > 計算量はどうなるのか 降順に並べた整数の列をシェルソートで並び替えた場合の計算量を導き出すというプログラムを作りたいです。 > nから降順で並べたソートをシェルソートで並び替える 整数の列の例ということで書いてました。無視してください。 分かりにくい補足ですが、お願いします。

関連するQ&A

  • シェルソートの計算量を求める方法について

    シェルソートで最悪の場合の計算量を求めたいです。 オーダーがnの二乗になるは知っていますが、その求め方、式がしりたいです。 要素数をN、感覚を4、2、1でお願いします。 考え方として各間隔のときのソート結果を無視して、各間隔時に単純挿入ソートと同様にして計算するのでしょうか? それとも、各間隔でのソート結果を考慮するべきなのでしょうか? できれば計算式と考え方、両方教えていただければありがたいです。 回答よろしくお願いします。

  • ソートの計算量などについて

    こんにちは ソートに関することの質問です。 1.バブルソートの計算量を出す式ですが O(n^2)=O(n-1)*O(n/2)*O(1)=O(n)*O(n)=O(n^2) で合っていますでしょうか? 2.クイックソートの(平均)計算量が nlog n(底は2)になるのは、なぜなのかを わかりやすく教えて下さい。(できれば式も) 3.クイックソートが最も高速に実行されるのは、ピボットの要素が真中にある場合で、反対に最も効率が悪いのはピボットが端にある場合ですが、この理由をやさしい言葉で教えて下さい。 どなたか教えて下さい。 よろしくお願いします

  • シェルソートの順位性

     このカテゴリーのNo.137(#35189)の続きなのですが、シェルソートについてご存知の方お願いします。  上記の質問にて、ヒープソートは完全二分割木型で、同一の値であってもその順序は保証されない、ということがわかりました。  そこで、配列の内容をソートする処理をシェルソートで組んでみました。  やろうとしているのは、n1、n2 の2つの配列に値を入れ、n1 が同じ値だったら n2 の値を使ってソートする、という処理です。  しかし実際には、n3、n4と無制限に続く2次元配列なので各配列を個別にソートしなければならず、n2 を先にソートしてから n1 をソートする、という処理を入れています。  ところがこれだと、n1 のソート時に同一の値の順序が崩れると、せっかく行った n2 のソートが無駄になってしまいます。  シェルソートの場合、こういうことは起こるのでしょうか。  よろしくお願いします。 

  • 【計算量Log n】僕は実際の面接でソートの計算量

    【計算量Log n】僕は実際の面接でソートの計算量を聞かれて、log nですかねと言ったら「は?」という顔をされたので即座に「nより速いのはありえないですよねー、HAHAHA!」とごまかして事なきを得た。 ツイッターより 計算量のlog nのnより早いのはあり得ないってどういう意味ですか? あとLog nの計算量とOのオーダ量の違いは何ですか?

  • クイックソートのプログラム

    『n個のデータを配列a[0],a[1],...,a[n-1]に読み込んでおき、クイックソートで降順に並べ替えるプログラムを作る。』 という問題が出ているのですが、C言語初心者の私には全くわからなくて困ってます。 このプログラムを教えてください!お願いします!

  • クイックソート

    N個のデータを降順に並び替えるプログラムをクイックソートで書きたいのですがよく分かりません。アルゴリズムの部分をどなたか教えてください。できれば詳しい説明もお願いします。

  • 計算量について

    プログラムの計算量について質問です。計算量には時間計算量と空間計算量がありますが、そのうち空間計算量の概念がいまいち分かりません。アルゴリズムが必要とする記憶容量といっても漠然としててどのように求めたらいいのか分かりません。 例えばプログラムの基本構成が for(n回){ for(n回){ 処理 } } のようだったら時間計算量がO(n^2)というのはわかるんですが、この場合の空間計算量はどのようになりますか?

  • ソート

    cygwinのCシェルで、ファイルの内容をソートしたいです。 数字だけだとsort -n でソートされるのですが、頭にアルファベットがある場合に ソートする方法はあるでしょうか? 下記のようになってしまうのですが、頭にアルファベットがあっても後ろの数字でソートしたいです。 L1 L10 L101 L102 L2 L20 L201 L3 L30 L301 L401

  • マージソートの計算量

    データ構造とアルゴリズムのテストでこんな問題が出てきました。 マージソートにおける値の比較回数は、C(n)は次のように表すことができる。C(4)は幾らか。 C(n) = 1 (n = 1のとき) C(n) = 2 C(n/2) + n (n > 1のとき) この問題の解答は12でした。 この問題を解くプロセスを教えていただけませんか? よろしくお願いします。

  • ソートアルゴリズム

    お忙しいところすいません。 先日授業で出された課題がどうしても分からなかったので教えていただきたいと思っています。 どうやってプログラムを作ればよいでしょうか。 問題は、 『N件の乱数データを用意し、昇順(または降順)に並べる。 データ件数、ソート所用時間を表示する。 ソート時間1~100秒で処理できるデータ件数を確認する。 ソートアルゴリズムは2種以上作成すること。』 です。

専門家に質問してみよう