【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※マルチポスト(多重投稿)は謹んで!

 詳しくはこちら



 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板2こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.18617

大量のデータをソートするには?
投稿者---hikaru(2004/12/10 09:58:28)


100万個のデータをソートするにはどうすればいいんですか?
今のプログラムではエラーがでてしまいます。少ないデータなら並び替えができます。教えてもらえないでしょうか?環境はリナックスでコンパイルはgccです。よろしくお願いします。
できればこのプログラムを改良してもらえるとありがたいです。
#include <stdio.h>

void selection_sort( int * , int ) ;

main( ) {
  char file[10] ;
  int a[256],i=0,j; 
  FILE *fp ;
  
  printf("ファイル名を入力してください");
  scanf("%s",file);
  fp = fopen(file,"r");
  if(fp==NULL) {
    printf("ファイルがありません\n");
    return 1;
  }
    while(fscanf(fp,"%d",&a[i])!=EOF) i++ ;
    fclose(fp);
    selection_sort(a,i+1);
  
  for(j=0;j<=i;j++){
    printf("%d\n",a[j]);
  }
}

/* 選択ソート */
void selection_sort(int a[], int n)
{
    int i, j, t, lowest, lowkey;
int h=0;
int k=0;

    for (i = 0; i < n - 1; i++) {
lowest = i;
lowkey = a[i];
for (j = i + 1; j < n; j++){
h++;
    if (a[j] < lowkey) {
lowest = j; lowkey = a[j];
    }
}
k++;
t = a[i]; a[i] = a[lowest]; a[lowest] = t;
    }
printf("選択 :比較%2d:交換%2d\n",h,k);
}




この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:大量のデータをソートするには? 18618 επιστημη 2004/12/10 10:04:35
<子記事> Re:大量のデータをソートするには? 18620 gf 2004/12/10 10:14:37


No.18618

Re:大量のデータをソートするには?
投稿者---επιστημη(2004/12/10 10:04:35)


>今のプログラムではエラーがでてしまいます。

'どんなエラーか'ぐらいのことは書くのが作法。

100万だろが200万だろが、全部メモリーに納まるなら配列をデカくするだけ。
それが無理ならファイルに置いたままソートするようなアルゴリズム(マージ・ソート等)を用います。



この投稿にコメントする

削除パスワード

No.18621

Re:大量のデータをソートするには?
投稿者---hikaru(2004/12/10 12:37:59)


エラーは配列をいっぱい取りすぎということになってしまいます。
mainの中でa[1000000]と宣言するのではなく外で宣言するとどうですか?
ソートはセレクションソートで行いたいのですが。
お願いします。




この投稿にコメントする

削除パスワード

No.18622

Re:大量のデータをソートするには?
投稿者---REE(2004/12/10 12:51:39)


>エラーは配列をいっぱい取りすぎということになってしまいます。
>mainの中でa[1000000]と宣言するのではなく外で宣言するとどうですか?

やってみればわかりませんか?


この投稿にコメントする

削除パスワード

No.18623

Re:大量のデータをソートするには?
投稿者---επιστημη(2004/12/10 13:58:11)


>エラーは配列をいっぱい取りすぎということになってしまいます。

そりゃそうだ。スタックが溢れます。

>mainの中でa[1000000]と宣言するのではなく外で宣言するとどうですか?

どうですか、って… どうですか?

>ソートはセレクションソートで行いたいのですが。

セレクションソートで100万のデータを並び替えたらどれだけ待てばいいでしょね ^^; 理論的には1万個のソートにかかる時間の1万倍ですけど。



この投稿にコメントする

削除パスワード

No.18620

Re:大量のデータをソートするには?
投稿者---gf(2004/12/10 10:14:37)


> int a[256],i=0,j;

aの領域が足らないから、100万のデータが扱えない
といって、a[1000000]とするのは、今後のことや、
メモリのこと考えるとよろしくないですね



この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧