• ベストアンサー

ソートアルゴリズム

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

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

バブルソート、挿入ソートとかでアルゴリズムは調べてください。 時間を出さないといけないのが面倒ですね。単純なのは配列長を増やして いきながら、時間を計測してファイルに書き出し100秒を超えた時点で終了 したらどうでしょう。 ソートの部分を関数化して、その前後でGetSystemTimeを使って経過時間を 算出して個数と経過時間をファイルに書いてそれが100秒以上だったら終了。 使うのは、do{ 前述の処理 }while(~); 1秒から100秒という事なら1秒以下はファイル書き出しから条件分岐で弾き ましょう。 ソートの関数の引数は、ソートする配列長・ソートする配列へのポインタでい いんじゃないでしょうか。 <<do、whileループの中ですること>> 前処理:配列長を初期化例えば,length=10 1.配列確保、malloc関数で動的配列確保。   int *ptr;   ptr=(int *)malloc(sizeof(int)*length); <== intの配列を用意したい場合 double *ptr;   ptr=(double *)malloc(sizeof(double)*length); <== doubleの配列を用意したい場合   以降、ptr[~]の様に普通の配列として使えます。 2.作った配列に乱数設定   ループの中でptr[i]=rand()%100;って感じで。 3.GetSystemTimeで現在の開始時ののシステム時間を取得。 4.ソートの関数呼び出し 5.GetSystemTimeで現在の終了時ののシステム時間を取得。 6.開始時と終了時の時間差を計算。 7.時間差が1~100ならファイルに書き出し。 8.free(ptr)でメモリ開放。 とこんな感じです。時間計算は他の方法もあります。 time、difftimeとGetSystemTimeはどっちでもいいです。 time、difftime   <== <time.h> GetSystemTime <== <windows.h> 出来そうですか?余裕があるならqsort関数と自分の作ったソート関数の速度差を計算してみるといいと思います。大雑把な流れだけの説明ですが、出来そうですか?再質問受け付けます。 ※お礼といってはなんですが、以下のアンケートにご協力下さい。

参考URL:
http://oshiete1.goo.ne.jp/qa4815745.html

その他の回答 (3)

回答No.4

うっかり!!!忘れてました。 9.として、length++を追加して置いてください。 ※データ採取中なので、以下のアンケートに協力して頂けると嬉しいなぁ・・・。 宜しくお願いいたします。協力して頂けると、更に詳しく・・・。 http://oshiete1.goo.ne.jp/qa4815745.html http://oshiete1.goo.ne.jp/qa4818502.html

回答No.2

すみません、下の回答URLから最後の">"外してください。。。

回答No.1

作業の流れとしては以下のような感じになりますかね。 (1)使用するアルゴリズムを決める (2)決めたアルゴリズムでN件のデータをソートするプログラムを作る (3)プログラムを実行して、結果を集計する もうちょっと噛み砕くと以下のようになるでしょうか。 (1)ソートのアルゴリズムはいろいろあります。 <http://ja.wikipedia.org/wiki/%E3%82%BD%E3%83%BC%E3%83%88> 最も処理が早いとされているのは"クイックソート" 直感的に思いつくのは"バブルソート" あたりがわかりやすいでしょうか。好みで選べばOKだと思います。 (2)きっとここが難関ですよね。。(>_<; 以下のサイトではソートのアルゴリズムがいくつかjavaで書かれていますので参考になると思います <http://www.ics.kagoshima-u.ac.jp/~fuchida/edu/algorithm/sort-algorithm/> 以下のサイトでは実行時間の測定方法が出てるので参考にしてはいかがでしょうか <http://kzk9.net/column/time.html> (3)ここまでくれば終わったも同然ですよね(笑) では

890-poi
質問者

お礼

すいません。 補足のところにお礼を書いてしまいました!!!!笑 ありがとうございました。

890-poi
質問者

補足

すごく丁寧なお返事ありがとうございました。 本当に助かりました。 頑張ってやってみます。

関連するQ&A

  • クイックソート

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

  • クイックソートしながら重複要素削除アルゴリズム

    アルゴリズムが苦手な上、アルゴリズム解説自体C言語ベースで書かれ ている物が多く処理のイメージが沸かずクイックソートもコピペや既存 の関数で処理していて、満足に理解出来ていないのですが。 以下の問題を、お解かりになるかた教えて頂けませんでしょうか? ■問題 2万件位の数値データの中から重複要素を削除しながら昇順または降順で、 ソートするアルゴリズム(※1) ■条件 BASIC的(※2)な記述やプログラム中のコメントなどの形式でも構いま せん出来るだけ簡単に示して頂けると助かります。 補足 (※1)ソートする際、重複要素を消すともっと処理が早くなるのではと 思ったので。 目的は、処理の速さを求める事と、次回から応用が聞くよ うにソート自体を理解したいのでクイックソートで無くても構いません。 (※2)実際に動かなくても構いません、イメージが掴みやすい方が良いと    いう意味でとって下さい。

  • 困っています

    C言語を勉強しているのですが、100の乱数データを用意し、昇順に並べて、ソートにかかる時間を表示して10秒以内で処理できるデータを表示をするにはどうすればよいのですが? 特にソートにかかる時間と10秒以内で処理できるデータを表示をするのが分かりません。教えてください。宜しくお願いします。

  • クイックソート

    クイックソートのアルゴリズムの問題で 9 1 8 5 3 4 2 6 7 と上記のようなデータ列を昇順に整列するときに 9 1 8 5 3 4 2 6 7 6 1 8 5 3 4 2 9 7 6 1 2 5 3 4 8 9 7 とここで詰まってしまうんですけどどうしたら昇順に導けますか?

  • ファイルメーカーでのソート

    WindowsXP環境にてファイルメーカー5.0を使用しています。データのソートを行う場合昇順とか降順とかの選択はできますが、乱数的にバラバラに並べる方法はありますか? 何がやりたいかというと、データベースで単語帳(マメ単風)を作ったのですが、順番が同じだとパターンで覚えてしまうので、バラバラに並べたいのです。ファイルメーカーで無理なら、なにか別にでも方法がありますでしょうか。よろしくお願いします。

  • java ソート

    java ソート ソートプログラムを作ってみましょう ? double型の配列とメソッドを持つクラスを定義 ? コンストラクタで配列を初期化(0.0で初期化) ?配列を昇順,降順に並び替えるメソッドを持つこと ? 2種類のメソッドを持っても良い ? 引数の値で変えても良い ? ソート済み配列をチェックするメソッドを持つこと ? 1000000要素程度のソーティングで時間計測 課題です 全く手が出せず困ってます・・・。 ヒント、手順、解答 なんでも良いので、救いの手をお願いします!!

  • アルゴリズムについて

    「手作業によるソート」がレポートの課題として出されました。 「手作業のために効率的なアルゴリズムを考えて提案して分析しなさい」 条件は次の通り: 資料がそれぞれ A4 の紙一枚。見やすい位置に10桁の番号が書かれている。その番号の昇順にソートする。番号の分布については一切不明。二つのケースを想定: 1) 一人で資料5000枚をソート; 2) 20人で資料50000枚をソート。二つのケースに使えるアルゴリズム一つ、又は両ケースに使えるアルゴリズム一つでもよい。分析では O() での計算量 (理由つき) と実際に想定される時間。今まで習ったアルゴリズムとの類似点や相違点、手作業の特徴に考量した点などについても論じる。 何をすれば良いのかが分かりません。少しでも作業の道筋を示していただければ幸いです。 よろしくお願いします。

  • バブルソートの実行時間について

    バブルソートで降順、ランダム順に並んでいるデータを読み込ませて昇順に並び替える実行時間について質問です。 バブルソートにおける計算時間は、データ数が多いほど、並び替える回数が多いほど長くなるはずですが、実際に実行したところ、並び替える回数が多いはずの降順のほうがランダム順よりも早くなりました。 なぜこのようになるのですか? よろしくお願いします。

  • ソートに関する質問です

    C言語でのプログラム作成の課題が解けなくて困っています。 バブルソートを使って、1000000個の整数データを昇順に並べ替えるプログラムを作成するというものです。 自分なりに作成したプログラムは、mallocでデータを格納する動的領域を確保して、後はシンプルにバブルソートの処理を行っています。 データ数が5,6万程度なら正常な動作が確認できるのですが、それより大量のデータ数だと、処理に時間が掛かりすぎるせいか、もしくは処理しきれずに動かなくなってしまったのか分かりませんが、プログラムの処理がいつまでたっても終わりません。 おそらくバブルソートの2重ループのあたりで、膨大な処理になってしまうのだと思うのですが、この問題についての改善策をどなたかご教授いただけませんでしょうか。

  • Excelのユーザー定義のソート

    あるデータを都道府県別(北から)にソートしたいと思い、北海道~沖縄までをユーザー定義リストにしたのですが、ソートがかかりません。通常の昇順、降順でもないようだし??どなたか教えてください。お願いします。m(__)m

専門家に質問してみよう