- 締切済み
クイックソート
振り仮名でソートをしたいのですが不等号の「<」など記号など混ぜた時にうまくソートされません。 ロジック的に問題があると思うのですが、平仮名や全角カタカナはソートされてるのです。以下のソースなのですが分かる方ご指摘頂ければ幸いです。 int lo0は固定で0 int hi0は検索結果の数-1となっております。 getKana()は振り仮名をbeanから取得しています。 private void QuickSort(Vector beanValues, int lo0, int hi0) { int low = lo0; int high = hi0; String mid; Object[] records = beanValues.toArray(); if (hi0 > lo0) { mid = ((Bean)records[ ( lo0 + hi0 ) / 2 ]).getKana(); while( low <= high ) { while ((low < hi0) && (((Bean)records[low]).getKana().compareTo(mid) < 0)) { ++low; } while ((high > lo0) && (((Bean)records[high]).getKana().compareTo(mid) > 0)) { --high; } if (low <= high) { swap(beanValues, low, high); ++low; --high; } } if (lo0 < high) QuickSort(beanValues, lo0, high); if (low < hi0) QuickSort(beanValues, low, hi0); } } private void swap(Vector records, int i, int j) { Object T = records.elementAt(i); records.setElementAt(records.elementAt(j), i); records.setElementAt(T, j); } }
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- lumba_lumb
- ベストアンサー率26% (4/15)
可能性として「Y」と「<」が全角ならばそのようなソート結果になるかとおもいますが、その辺の可能性はないですか?
- lumba_lumb
- ベストアンサー率26% (4/15)
compareToメソッドの返り値はUnicodeの辞書式順なのですが、これがshinchunさんの望んだ並び順と異なるためではないでしょうか? http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/lang/String.html#compareTo(java.lang.String) http://ja.wikipedia.org/wiki/Category:Unicode%E8%A1%A8
補足
回答ありがとうございます。 Unicode表で番号を全て比較したのですがどうしてもおかしくて。。。 ちなみに検索結果が出る頭の文字は以下の順です。 頭文字:Unicode (:0020 8 5:0030 5 C:0040 3 C:0040 3 N:0040 E <:0030 C Y:0050 9 <の位置がなぜかそのようなとこに・・・・。 <のデータは<----と続いており<を省いても同じ検索結果になりました。
補足
2つ共半角でした。 付き合って頂いてありがとうございます。 新規でデータを登録すればきちんと認識されるのですが移行データだけがそのようなおかしなものになるので厄介でして・・・・。