[解決済み] Java : Arrays.sort()を使わずに整数配列をソートする。
2022-03-04 14:30:19
質問
これは、Javaの授業で行われる演習の1つである指示です。何よりも先に、私は「自分の宿題はする」し、Stack Overflowで誰かに答えを求めるような怠惰なことはしていない、ということを言いたいです。この特定の項目は、他のすべての演習の中で私の問題でした。なぜなら、私はこれに対する「完璧なアルゴリズム」を見つけるのに苦労していたからです。
<ブロッククオート10個の整数値を入力し、昇順または降順で表示するJAVAプログラムを作成しなさい。注意:Arrays.sort()は使用できません。
これは私が考え出したコードで、動作はしますが、1つ明らかな欠点があります。例えば同じ値を2回以上入力した場合。
5, 5, 5, 4, 6, 7, 3, 2, 8, 10
入力された3つの5のうち1つだけがカウントされ、出力に含まれることになります。私が得た出力は(昇順の場合)です。
2 3 4 5 0 0 6 7 8 10.
import java.util.Scanner;
public class Exer3AscDesc
{
public static void main(String args[])
{
Scanner scan = new Scanner(System.in);
int tenNums[]=new int[10], orderedNums[]=new int[10];
int greater;
String choice;
//get input
System.out.println("Enter 10 integers : ");
for (int i=0;i<tenNums.length;i++)
{
System.out.print(i+1+"=> ");
tenNums[i] = scan.nextInt();
}
System.out.println();
//imperfect number ordering algorithm
for(int indexL=0;indexL<tenNums.length;indexL++)
{
greater=0;
for(int indexR=0;indexR<tenNums.length;indexR++)
{
if(tenNums[indexL]>tenNums[indexR])
{
greater++;
}
}
orderedNums[greater]=tenNums[indexL];
}
//ask if ascending or descending
System.out.print("Display order :\nA - Ascending\nD - Descending\nEnter your choice : ");
choice = scan.next();
//output the numbers based on choice
if(choice.equalsIgnoreCase("a"))
{
for(greater=0;greater<orderedNums.length;greater++)
{
System.out.print(orderedNums[greater]+" ");
}
}
else if(choice.equalsIgnoreCase("d"))
{
for(greater=9;greater>-1;greater--)
{
System.out.print(orderedNums[greater]+" ");
}
}
}
}
解決方法は?
インターネットでは様々なソートアルゴリズムが紹介されていますが、もしあなた独自の解決法を見つけたいのであれば、あなたのコードに以下の変更を加えることができます。
の代わりに
orderedNums[greater]=tenNums[indexL];
をする必要があります。
while (orderedNums[greater] == tenNums[indexL]) {
greater++;
}
orderedNums[greater] = tenNums[indexL];
このコードは基本的に、特定のインデックスが同じような番号で占められているかどうかをチェックし、次に空いているインデックスを探そうとするものです。
注意:ソートされた配列の要素のデフォルト値は0なので、0がリストにないことを確認する必要があります。
という特別な番号でソートされた配列を開始します。
はリストにありません。
Integer.MAX_VALUE
関連
-
[解決済み] Javaで配列に特定の値が含まれているかどうかを判断するにはどうすればよいですか?
-
[解決済み] Javaで配列を宣言し、初期化する方法は?
-
[解決済み] Java の配列を表示する最も簡単な方法は何ですか?
-
[解決済み] 配列の反復処理に "for...in "を使用するのは、なぜ良くないのでしょうか?
-
[解決済み] 多次元配列の値によるソート方法
-
[解決済み] 新しい配列を作成せずに、既存のJavaScript配列を別の配列で拡張する方法
-
[解決済み] Javaで汎用配列を作成する方法は?
-
[解決済み] Javaで配列をリストに変換する
-
[解決済み] 整数の配列を正しくソートする方法
-
[解決済み】オブジェクトの配列を文字列のプロパティ値でソートする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Javaで拡張子なしのファイル名を取得する方法は?
-
[解決済み] ストリングビルダー.イコール Java
-
[解決済み] JavaでFileFilterを作るには?
-
[解決済み] Application startメソッドで例外が発生する。JavaFx 11
-
[解決済み] enumのordinalを使用するのは良い習慣ですか?
-
[解決済み] XX:MaxDirectMemorySizeの既定値
-
[解決済み] double 型を Int 型に変換、切り捨て
-
[解決済み] Androidのコールバックとは何ですか?重複
-
[解決済み] android.support.v4.app.FragmentActivity' で 'TAG' がプライベートアクセスされている。
-
[解決済み] Mavenです。JARは空になります - 含有するためにマークされたコンテンツがありません