前回の降順ソートプログラムに、いくつか加えて、100万個のランダムなデータをソートして速さを比較してみました。(^_^;
やはり、シンプル・イズ・ベストってことかな。(^_^;
●ReverseSort2.java
/* * ReverseSort2.java */ import java.util.*; class ReverseSort2 { static void reverseSort1(int[] a) { // 昇順ソートしてリバースする Arrays.sort(a); for(int i=0, j=a.length-1; i< j; i++, j--) { int t=a[i]; a[i]=a[j]; a[j]=t; } } static void reverseSort2(int[] a) { // ラッパー型に変換して降順ソートして戻す Integer[] b = new Integer[a.length]; for(int i=0; i< a.length; i++) b[i]=a[i]; // オートボクシング Arrays.sort(b, Collections.reverseOrder()); for(int i=0; i< a.length; i++) a[i]=b[i]; // オートアンボクシング } static void reverseSort3(Integer[] a) { // ラッパー型の降順ソート Arrays.sort(a, Collections.reverseOrder()); } static void reverseSort4(Integer[] a) { // 比較関数をオーバーライドして降順ソート Arrays.sort(a, new Comparator<Integer>() { @Override public int compare(Integer lhs, Integer rhs) { if (lhs < rhs) return 1; else if (lhs > rhs) return -1; return 0; } }); } public static void main(String[] args) { final int N = 1000000; Random rand = new Random(); int[] values = new int[N]; Integer[] Values = new Integer[N]; long tm; System.out.printf("データの個数:%,d [個]\n",N); System.out.println("//--- 昇順ソートしてリバースする ---//"); for(int i=0; i< N; i++) values[i] = rand.nextInt(N); tm=System.nanoTime(); // Timer Start reverseSort1(values); tm=System.nanoTime()-tm; // Timer Stop //System.out.println(Arrays.toString(values)); System.out.printf("Runtime : %.3f [sec]\n",(double)tm/1e9); System.out.println("//--- ラッパー型に変換して降順ソートして戻す ---//"); for(int i=0; i< N; i++) values[i] = rand.nextInt(N); tm=System.nanoTime(); // Timer Start reverseSort2(values); tm=System.nanoTime()-tm; // Timer Stop //System.out.println(Arrays.toString(values)); System.out.printf("Runtime : %.3f [sec]\n",(double)tm/1e9); System.out.println("//--- ラッパー型の降順ソート ---//"); for(int i=0; i< N; i++) Values[i] = rand.nextInt(N); tm=System.nanoTime(); // Timer Start reverseSort3(Values); tm=System.nanoTime()-tm; // Timer Stop //System.out.println(Arrays.toString(Values)); System.out.printf("Runtime : %.3f [sec]\n",(double)tm/1e9); System.out.println("//--- 比較関数をオーバーライドして降順ソート ---//"); for(int i=0; i< N; i++) Values[i] = rand.nextInt(N); tm=System.nanoTime(); // Timer Start reverseSort4(Values); tm=System.nanoTime()-tm; // Timer Stop //System.out.println(Arrays.toString(Values)); System.out.printf("Runtime : %.3f [sec]\n",(double)tm/1e9); } }
●実行結果
データの個数:1,000,000 [個] //--- 昇順ソートしてリバースする ---// Runtime : 0.195 [sec] //--- ラッパー型に変換して降順ソートして戻す ---// Runtime : 1.068 [sec] //--- ラッパー型の降順ソート ---// Runtime : 0.809 [sec] //--- 比較関数をオーバーライドして降順ソート ---// Runtime : 0.865 [sec]
※参考URL
●[ Java ] Arrays クラスを使って配列を降順にソートする方法 - tekboy
●Android(Java)でプリミティブ型の配列の降順ソートがめんどくさい
- 作者: 柴田望洋
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2007/08/08
- メディア: 単行本
- 購入: 16人 クリック: 271回
- この商品を含むブログ (55件) を見る
- 作者: 柴田望洋
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2007/11/07
- メディア: 単行本
- 購入: 5人 クリック: 42回
- この商品を含むブログ (20件) を見る
- 作者: 近藤嘉雪
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2011/01/26
- メディア: 単行本
- 購入: 1人 クリック: 15回
- この商品を含むブログ (5件) を見る