- ベストアンサー
ソートアルゴリズム
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
バブルソート、挿入ソートとかでアルゴリズムは調べてください。 時間を出さないといけないのが面倒ですね。単純なのは配列長を増やして いきながら、時間を計測してファイルに書き出し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関数と自分の作ったソート関数の速度差を計算してみるといいと思います。大雑把な流れだけの説明ですが、出来そうですか?再質問受け付けます。 ※お礼といってはなんですが、以下のアンケートにご協力下さい。
その他の回答 (3)
- NEKOGABURI
- ベストアンサー率7% (7/98)
うっかり!!!忘れてました。 9.として、length++を追加して置いてください。 ※データ採取中なので、以下のアンケートに協力して頂けると嬉しいなぁ・・・。 宜しくお願いいたします。協力して頂けると、更に詳しく・・・。 http://oshiete1.goo.ne.jp/qa4815745.html http://oshiete1.goo.ne.jp/qa4818502.html
- negi-pawn
- ベストアンサー率0% (0/1)
すみません、下の回答URLから最後の">"外してください。。。
- negi-pawn
- ベストアンサー率0% (0/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)ここまでくれば終わったも同然ですよね(笑) では
関連するQ&A
- クイックソートしながら重複要素削除アルゴリズム
アルゴリズムが苦手な上、アルゴリズム解説自体C言語ベースで書かれ ている物が多く処理のイメージが沸かずクイックソートもコピペや既存 の関数で処理していて、満足に理解出来ていないのですが。 以下の問題を、お解かりになるかた教えて頂けませんでしょうか? ■問題 2万件位の数値データの中から重複要素を削除しながら昇順または降順で、 ソートするアルゴリズム(※1) ■条件 BASIC的(※2)な記述やプログラム中のコメントなどの形式でも構いま せん出来るだけ簡単に示して頂けると助かります。 補足 (※1)ソートする際、重複要素を消すともっと処理が早くなるのではと 思ったので。 目的は、処理の速さを求める事と、次回から応用が聞くよ うにソート自体を理解したいのでクイックソートで無くても構いません。 (※2)実際に動かなくても構いません、イメージが掴みやすい方が良いと いう意味でとって下さい。
- ベストアンサー
- その他(プログラミング・開発)
- ファイルメーカーでのソート
WindowsXP環境にてファイルメーカー5.0を使用しています。データのソートを行う場合昇順とか降順とかの選択はできますが、乱数的にバラバラに並べる方法はありますか? 何がやりたいかというと、データベースで単語帳(マメ単風)を作ったのですが、順番が同じだとパターンで覚えてしまうので、バラバラに並べたいのです。ファイルメーカーで無理なら、なにか別にでも方法がありますでしょうか。よろしくお願いします。
- ベストアンサー
- その他(データベース)
- アルゴリズムについて
「手作業によるソート」がレポートの課題として出されました。 「手作業のために効率的なアルゴリズムを考えて提案して分析しなさい」 条件は次の通り: 資料がそれぞれ A4 の紙一枚。見やすい位置に10桁の番号が書かれている。その番号の昇順にソートする。番号の分布については一切不明。二つのケースを想定: 1) 一人で資料5000枚をソート; 2) 20人で資料50000枚をソート。二つのケースに使えるアルゴリズム一つ、又は両ケースに使えるアルゴリズム一つでもよい。分析では O() での計算量 (理由つき) と実際に想定される時間。今まで習ったアルゴリズムとの類似点や相違点、手作業の特徴に考量した点などについても論じる。 何をすれば良いのかが分かりません。少しでも作業の道筋を示していただければ幸いです。 よろしくお願いします。
- ベストアンサー
- その他(学問・教育)
- バブルソートの実行時間について
バブルソートで降順、ランダム順に並んでいるデータを読み込ませて昇順に並び替える実行時間について質問です。 バブルソートにおける計算時間は、データ数が多いほど、並び替える回数が多いほど長くなるはずですが、実際に実行したところ、並び替える回数が多いはずの降順のほうがランダム順よりも早くなりました。 なぜこのようになるのですか? よろしくお願いします。
- ベストアンサー
- C・C++・C#
- ソートに関する質問です
C言語でのプログラム作成の課題が解けなくて困っています。 バブルソートを使って、1000000個の整数データを昇順に並べ替えるプログラムを作成するというものです。 自分なりに作成したプログラムは、mallocでデータを格納する動的領域を確保して、後はシンプルにバブルソートの処理を行っています。 データ数が5,6万程度なら正常な動作が確認できるのですが、それより大量のデータ数だと、処理に時間が掛かりすぎるせいか、もしくは処理しきれずに動かなくなってしまったのか分かりませんが、プログラムの処理がいつまでたっても終わりません。 おそらくバブルソートの2重ループのあたりで、膨大な処理になってしまうのだと思うのですが、この問題についての改善策をどなたかご教授いただけませんでしょうか。
- ベストアンサー
- C・C++・C#
- Excelのユーザー定義のソート
あるデータを都道府県別(北から)にソートしたいと思い、北海道~沖縄までをユーザー定義リストにしたのですが、ソートがかかりません。通常の昇順、降順でもないようだし??どなたか教えてください。お願いします。m(__)m
- ベストアンサー
- オフィス系ソフト
お礼
すいません。 補足のところにお礼を書いてしまいました!!!!笑 ありがとうございました。
補足
すごく丁寧なお返事ありがとうございました。 本当に助かりました。 頑張ってやってみます。