![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
No.3ベストアンサー
- 回答日時:
ファイルのソートの方法はとりあえず2種類あると思います。
1.ファイルから1件(行?)ずつ読み込みながら、別ファイルに書き込んでいくやり方
・データ件数が多いときにメモリの圧迫を防ぐ。
・HDDフル稼働になる。
※NECソフトのソートマージツール(¥50万)では、
100バイト×1000万行=130秒で処理可能。
2.すべてメモリに読み込み、
メモリ内でソートするやり方
・データ件数が多いときにメモリが圧迫される。
・メモリ上で操作するので速い。
※クイックソートと同等のスピードでメモリの肥大化を防ぐ、
コムソート(combsort)というソートのやり方があります。
整数値の平均が6バイトとして、
6バイト×100万件=6Mバイト
まぁ大丈夫でしょう…。
ちなみにコムソートのロジックはこんな感じです。
public void ComSort(long[] data) {
double sf = 1.3;
long gap = data.length;
boolean flag = true;
int j = 0;
while (flag || (gap > 1)) {
gap = (long) Math.floor(gap / sf);
if (gap == 9 || gap == 10) gap = 11;
if (gap < 1)
gap = 1;
flag = true;
for (int i = 0; i < data.length - gap; i++) {
j = i + gap;
if (data[i] > data[j]) {
long buf;
buf = data[i];
data[i] = data[j];
data[j] = buf;
flag = false;
}
}
}
}
No.2
- 回答日時:
ソート対象の数が多いときにどうなのかという質問だとして、
http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ …[])
public static void sort(int[] a)
指定された int 値の配列を数値の昇順でソートします。ソートアルゴリズムは調整されたクイックソートで、『Software-Practice and Experience, Vol. 23(11)』(1993 年 11 月) の 1249 ~ 1265 ページの Jon L. Bentley と M. Douglas McIlroy による「Engineering a Sort
Function」という記事から応用したものです。このアルゴリズムは、他のクイックソートアルゴリズムでは n の二乗のパフォーマンスに低下させる多くのデータセットにおいて、n*log(n) のパフォーマンスを提供します。
ということなので、アルゴリズム的な問題はないと思います。
とりあえず乱数で百万個の整数を生成してそれをソートするという
プログラムを組んで試してみましたが
>java SortArray
start :Sun Sep 30 01:28:29 JST 2007
finish :Sun Sep 30 01:28:32 JST 2007
>java SortArray
start :Sun Sep 30 01:32:31 JST 2007
finish :Sun Sep 30 01:32:31 JST 2007
>java SortArray
start :Sun Sep 30 01:32:33 JST 2007
finish :Sun Sep 30 01:32:33 JST 2007
>java SortArray
start :Sun Sep 30 01:32:42 JST 2007
finish :Sun Sep 30 01:32:43 JST 2007
>java SortArray
start :Sun Sep 30 01:32:48 JST 2007
finish :Sun Sep 30 01:32:48 JST 2007
それなりのマシンで動かすならそんなに心配する必要はないのでは?
ファイルの読み込みをするとそれで時間がかかることは明らかですが、
ざっと一行あたり10バイトとしてそれが百万行で一千万バイト。
ほぼ10メガバイトとみても一日仕事にはならないでしょう。
No.1
- 回答日時:
現実的とはどういう意味なのかが良くわかりませんが、
javaでそのようなプログラムを作ることは可能ですし、
経験者であればさほど時間も掛からないと思います。
未経験であっても、それなりにjavaを学習していれば問題ないレベルだと思います。
また、java以外でと考えているのであればCのほうがより機械語に近いので処理速度的には早いでしょう。
ただしCの場合は領域の確保をよりシビアにしないといけないかもしれません。
領域の確保を気にしないのであればC++のほうがクラスを使って楽に作れそうな気もします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 至急お願いします。C言語で.imgのファイルを読み込んで1バイトづつ出力するプログラムを作りたいので 3 2023/01/16 22:49
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、写真のプログラムをどう直せ 2 2022/07/09 21:13
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- Java java 次の機能を有するメソッドを自クラスに作成し、実装したいです。 機能 名前判定機能 →名前が 3 2022/06/16 16:08
- Java java 入力された文字列を数値に置き換えて整数にし、計算をしたいです。 <を10として /を1とし 4 2022/05/16 21:08
- Java Java配列の問題を教えてください。 乱数で20個出力し、最大、最小、合計、平均を求め、更に昇順にソ 3 2023/07/10 18:32
- Java Javaの問題なのですが、 永久ループを使って以下に従って数値を出力するプログラムを作成する。 ・1 3 2023/06/06 18:43
- Ruby プログラミングについてです。教えていただきたいです。 実行例のように、整数xが1から12までにつき、 2 2022/12/19 22:47
- Excel(エクセル) 結合セルのソートについて 5 2022/04/22 11:57
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C# DataTableの行をソートしてD...
-
jqgrid で 2から3 階層以上の j...
-
listboxの並び替え
-
C# DataGridView のヘッダーセ...
-
VB.NETでファイル名順にファイ...
-
昇順と降順
-
excel VBA リストビューの行...
-
vbでDataTableの抽出コピー
-
DirectoryInfo型配列ソート(C#)
-
ファイル名「1.jpg ~10.jpg~...
-
System.IO.Directory.GetFiles...
-
ブック.csvを開かずに他のブッ...
-
あるディレクトリ内のファイル...
-
excel VBA の条件をつけての列...
-
構造体配列のソート
-
C言語・要素除去
-
プログラミングについて 配列を...
-
数字文字列のソート方法
-
配列の問題
-
関数から配列を返すには?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
System.IO.Directory.GetFiles...
-
VB.NETでファイル名順にファイ...
-
C言語・要素除去
-
C# DataGridView のヘッダーセ...
-
Excelですべての組合せ(重複組...
-
VBA基本構文の作り方 2列の...
-
なぜ?counterintuitive
-
ファイル名「1.jpg ~10.jpg~...
-
リスト構造のソートで悩んでま...
-
配列の問題
-
C# DataTableの行をソートしてD...
-
あるディレクトリ内のファイル...
-
excel VBA の条件をつけての列...
-
10個の整数を入力して小さい順...
-
文字列をソートする方法
-
excel VBA リストビューの行...
-
DataGridViewの複数列を連動し...
-
2次元配列を複数項目でソートし...
-
csvファイル内にてソートす...
-
n番目に大きい数を求めるアル...
おすすめ情報