質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
ソート

複数のデータを、順序性に従って並べ替えること。 データ処理を行う際に頻繁に用いられ、多くのアルゴリズムが存在します。速度、容量、複雑さなどに違いがあり、高速性に特化したものにクイックソートがあります。

Q&A

解決済

1回答

350閲覧

時間の短い順にデータを並べるには

退会済みユーザー

退会済みユーザー

総合スコア0

ソート

複数のデータを、順序性に従って並べ替えること。 データ処理を行う際に頻繁に用いられ、多くのアルゴリズムが存在します。速度、容量、複雑さなどに違いがあり、高速性に特化したものにクイックソートがあります。

0グッド

0クリップ

投稿2017/09/10 09:20

編集2017/09/10 09:33
この履歴を時間の短い順にクイックソートしたいのですが大体昇順(10個表示)になっているのですが、うまくいきません。 下にコードと実行結果を示してあります。よろしくお願いいたします。 コード/* ラックナンバーサーチ・トレーニング(最近の10回の日時)*/ #include <stdio.h> #include <time.h> #include <float.h> #include <ctype.h> #include <stdlib.h> #include <sys/types.h> #include <unistd.h> #include "getputch.h" #define MAX_STAGE 3 #define swap(type, x, y) do { type t = x; x = y; y = t; } while (0) #define MAX_NUM 10 char dtfile[] = "LACKNUM.DAT"; char dtfile2[] = "LACKNUM2.DAT";/* 最高記録用のファイル */ typedef struct { int tm_year; int tm_mon; int tm_mday; int tm_hour; int tm_min; int tm_sec; double score; } BEST_TEN; // --------------- 比較用の関数 cmp ------------------- int cmpptr( const void *p, const void *q ) { return (*(BEST_TEN**)p)->score - (*(BEST_TEN**)q)->score; } // ---------------------------------------------------- /*--- 過去のトレーニング情報を取得・表示して最高得点を返す ---*/ double get_data(int *count) { FILE *fp; /* これまでの履歴を指すポインタ */ FILE *fp2; /* これまでの最短所要時間を指すポインタ */ double score; //これまでの履歴の所要時間 double bestscore; //これまでの最短所要時間 int i,j=0; BEST_TEN best_ten[100]={0}; if ((fp = fopen(dtfile, "rb")) == NULL) { printf("ファイルを作成します。\n\n"); bestscore = DBL_MAX; /* float.hに定義されている。double型で表現できる最大値を表すマクロDBL_MAX */ } else { struct tm local; double line[256]; printf("\n過去の履歴\n-------------------------- \n"); while((i = fread(&local, sizeof(struct tm), 1, fp)) > 0 ){ printf("%d年 %d月 %d日 %d時 %d分 %d秒\n", local.tm_year + 1900, local.tm_mon + 1, local.tm_mday, local.tm_hour, local.tm_min, local.tm_sec); fread(&score, sizeof(double), 1, fp); printf("得点(所要時間)は%.1f秒\n\n", score); best_ten[j].tm_year=local.tm_year; best_ten[j].tm_mon=local.tm_mon; best_ten[j].tm_mday=local.tm_mday; best_ten[j].tm_hour=local.tm_hour; best_ten[j].tm_min=local.tm_min; best_ten[j].tm_sec=local.tm_sec; best_ten[j].score=score; j++; (*count)++; } printf("count1は%d\n\n", *count); } BEST_TEN *plst[*count]; for( i = 0; i < *count; i++ ) plst[i] = &best_ten[i]; //qsort(配列名, 配列の数, 配列一つのバイト数, 比較関数) qsort( plst, *count, sizeof(BEST_TEN*), cmpptr ); printf("\n過去のbestten\n-------------------------- \n"); // 並べ替え後の内容を表示 for(i=0;i<10;i++){ printf( "%d年 %d月 %d日 %d時 %d分 %d秒 \n" ,plst[i]->tm_year+1900, plst[i]->tm_mon+1, plst[i]->tm_mday, plst[i]->tm_hour,plst[i]->tm_min,plst[i]->tm_sec ); printf("得点(所要時間)は %.1f秒です。\n\n", plst[i]->score); } bestscore=plst[0]->score; fflush(stdout); fclose(fp); printf("count2は%d\n\n", *count); return bestscore; } int main(void) { int count=0; // double score; // 今回の所要時間 double bestscore; // 最短所要時間 double jikan; // 時間 FILE *fp; struct tm local ; int k; int i, j, x, stage; bestscore= get_data(&count); // get_data()で前回までの最短所要時間を // ファイルから読み込んでbestscoreに代入する。 printf("bestscoreは%.1f\n\n", bestscore); printf("count3は%d\n\n", count); return 0; } /* C:\MinGW\users\chap09\kadai>gcc -I. -o kadai9-1-5 kadai9-1-5.c pdcurs es.a C:\MinGW\users\chap09\kadai>kadai9-1-5 過去の履歴 -------------------------- 2015年 10月 27日 19時 9分 59秒 得点(所要時間)は11.0秒 2016年 1月 4日 19時 15分 11秒 得点(所要時間)は8.0秒 2016年 1月 4日 19時 16分 8秒 得点(所要時間)は9.0秒 2016年 1月 4日 19時 16分 39秒 得点(所要時間)は10.0秒 2016年 1月 4日 19時 19分 7秒 得点(所要時間)は10.0秒 2016年 1月 4日 19時 21分 11秒 得点(所要時間)は10.0秒 2016年 1月 4日 19時 21分 44秒 得点(所要時間)は8.0秒 2016年 1月 4日 19時 22分 55秒 得点(所要時間)は13.0秒 2016年 1月 5日 21時 31分 52秒 得点(所要時間)は12.0秒 2016年 1月 5日 21時 33分 29秒 得点(所要時間)は10.0秒 2016年 1月 31日 20時 41分 8秒 得点(所要時間)は10.0秒 2016年 1月 31日 21時 9分 59秒 得点(所要時間)は17.0秒 2016年 1月 31日 21時 12分 13秒 得点(所要時間)は8.0秒 2016年 1月 31日 21時 41分 42秒 得点(所要時間)は9.0秒 2016年 2月 2日 8時 39分 50秒 得点(所要時間)は13.0秒 2016年 2月 2日 8時 49分 31秒 得点(所要時間)は13.0秒 2016年 2月 2日 8時 58分 15秒 得点(所要時間)は13.0秒 2016年 2月 27日 8時 28分 42秒 得点(所要時間)は14.0秒 2016年 3月 27日 12時 47分 52秒 得点(所要時間)は8.0秒 2016年 3月 27日 12時 52分 31秒 得点(所要時間)は11.0秒 2016年 3月 27日 12時 54分 35秒 得点(所要時間)は9.0秒 2016年 3月 27日 13時 5分 4秒 得点(所要時間)は9.0秒 2016年 3月 27日 13時 15分 12秒 得点(所要時間)は13.0秒 2016年 5月 2日 15時 54分 51秒 得点(所要時間)は16.0秒 2016年 5月 2日 15時 57分 18秒 得点(所要時間)は9.0秒 2016年 5月 2日 16時 24分 25秒 得点(所要時間)は14.0秒 2016年 5月 2日 16時 40分 31秒 得点(所要時間)は16.0秒 2016年 5月 2日 16時 42分 52秒 得点(所要時間)は11.0秒 2016年 5月 2日 16時 43分 30秒 得点(所要時間)は12.0秒 2016年 5月 2日 16時 44分 14秒 得点(所要時間)は12.0秒 2016年 5月 2日 17時 0分 48秒 得点(所要時間)は7.0秒 2017年 8月 14日 16時 36分 8秒 得点(所要時間)は12.0秒 2017年 8月 14日 20時 57分 13秒 得点(所要時間)は10.0秒 2017年 8月 14日 20時 57分 40秒 得点(所要時間)は6.0秒 2017年 8月 14日 21時 3分 21秒 得点(所要時間)は13.0秒 2017年 8月 14日 21時 7分 3秒 得点(所要時間)は11.0秒 2017年 8月 14日 21時 23分 16秒 得点(所要時間)は13.0秒 2017年 8月 14日 22時 11分 55秒 得点(所要時間)は11.0秒 2017年 8月 14日 22時 16分 22秒 得点(所要時間)は8.0秒 2017年 9月 9日 10時 20分 15秒 得点(所要時間)は12.0秒 2017年 9月 9日 10時 25分 1秒 得点(所要時間)は13.0秒 2017年 9月 9日 10時 57分 21秒 得点(所要時間)は12.0秒 2017年 9月 9日 11時 3分 6秒 得点(所要時間)は16.0秒 2017年 9月 9日 11時 10分 34秒 得点(所要時間)は24.0秒 2017年 9月 9日 11時 11分 18秒 得点(所要時間)は28.0秒 2017年 9月 9日 11時 17分 44秒 得点(所要時間)は15.0秒 2017年 9月 9日 11時 22分 20秒 得点(所要時間)は9.0秒 2017年 9月 9日 11時 27分 33秒 得点(所要時間)は12.0秒 2017年 9月 9日 11時 28分 59秒 得点(所要時間)は8.0秒 2017年 9月 9日 12時 0分 59秒 得点(所要時間)は13.3秒 2017年 9月 9日 12時 3分 5秒 得点(所要時間)は6.1秒 2017年 9月 9日 12時 3分 29秒 得点(所要時間)は11.0秒 2017年 9月 9日 12時 4分 2秒 得点(所要時間)は7.5秒 2017年 9月 9日 12時 7分 46秒 得点(所要時間)は22.0秒 2017年 9月 9日 12時 9分 56秒 得点(所要時間)は11.0秒 2017年 9月 9日 12時 14分 36秒 得点(所要時間)は6.2秒 2017年 9月 9日 12時 38分 12秒 得点(所要時間)は8.0秒 2017年 9月 9日 12時 39分 12秒 得点(所要時間)は21.0秒 2017年 9月 10日 12時 48分 1秒 得点(所要時間)は15.0秒 2017年 9月 10日 16時 9分 3秒 得点(所要時間)は11.0秒 2017年 9月 10日 16時 13分 40秒 得点(所要時間)は13.0秒 2017年 9月 10日 16時 15分 25秒 得点(所要時間)は10.0秒 2017年 9月 10日 16時 16分 4秒 得点(所要時間)は22.0秒 2017年 9月 10日 16時 18分 14秒 得点(所要時間)は15.0秒 2017年 9月 10日 16時 19分 27秒 得点(所要時間)は9.0秒 2017年 9月 10日 16時 19分 47秒 得点(所要時間)は9.0秒 count1は66 過去のbestten -------------------------- 2017年 8月 14日 20時 57分 40秒 得点(所要時間)は 6.0秒です。 2017年 9月 9日 12時 14分 36秒 得点(所要時間)は 6.2秒です。 2016年 5月 2日 17時 0分 48秒 得点(所要時間)は 7.0秒です。 2017年 9月 9日 12時 3分 5秒 得点(所要時間)は 6.1秒です。 2016年 1月 4日 19時 15分 11秒 得点(所要時間)は 8.0秒です。 2016年 1月 4日 19時 21分 44秒 得点(所要時間)は 8.0秒です。 2017年 9月 9日 12時 4分 2秒 得点(所要時間)は 7.5秒です。 2017年 9月 9日 12時 38分 12秒 得点(所要時間)は 8.0秒です。 2016年 1月 31日 21時 12分 13秒 得点(所要時間)は 8.0秒です。 2017年 9月 9日 11時 28分 59秒 得点(所要時間)は 8.0秒です。 count2は66 bestscoreは6.0 count3は66 C:\MinGW\users\chap09\kadai> */

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2017/09/12 10:21

質問タグにて言語を指定されたほうが回答を得やすいと思います。
退会済みユーザー

退会済みユーザー

2017/09/12 10:33

すみません。このコーナーの使い方がいまいちわかりません。質問文を送る時、タグ欄はどうすればいいかよくわからないし、”ここに言語を記入”というところはどこに何を書けばいいのですか、c言語をつかっていますがそれを書くってことですか?質問の内容はここにかいていいのですか?教えてください。
guest

回答1

0

ベストアンサー

この質問を棚上げしたいと思います。解答していただいている方に申し訳ないので、このコードを使っている
全文を完成してから、指摘いただいたコードの修正にとりかかりたいとおもいます。

投稿2017/09/12 10:37

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問