隣り合う数3つを昇順に入れ替えるバブルソートのプログラムを作成したのですが、動作確認で試しに1 7 3 4 2という値を入力してctr+Zボタンを押したところ、1 2 3 4 7という結果が無限に表示され続けてしまいました。
表示を一回だけにするには、このプログラムのどこを修正すれば良いのでしょうか?
教えていただければ幸いです。
宜しくお願いします。
import java.util.Scanner; public class abc { public static void main(String[] args) { final int NO=16 ; int[] a = new int[NO] ; int x,k,j,n ; Scanner stdin = new Scanner (System.in ) ; n=0 ; while( stdin.hasNextInt() ) { a[n] = stdin.nextInt() ; n++ ; } for (j=n-1;j>0;j--) { // Bubble Sort for (k=1;k<j;k++) { if((a[k-1]<a[k])&&(a[k]<a[k+1])){} if((a[k-1]<a[k+1])&&(a[k+1]<a[k])){x=a[k] ; a[k]=a[k+1]; a[k+1]=x;} if((a[k]<a[k-1])&&(a[k-1]<a[k+1])) {x=a[k] ; a[k]=a[k-1]; a[k-1]=x;} if((a[k]<a[k+1])&&(a[k+1]<a[k-1])) {x=a[k-1] ; a[k-1]=a[k+1]; a[k+1]=x;x=a[k-1];a[k-1]=a[k];a[k]=x;} if((a[k+1]<a[k-1])&&(a[k-1]<a[k])){x=a[k-1] ; a[k-1]=a[k+1]; a[k+1]=x;x=a[k];a[k]=a[k+1];a[k+1]=x;} if((a[k+1]<a[k])&&(a[k]<a[k-1])){x=a[k-1] ; a[k-1]=a[k+1]; a[k+1]=x;} } for (j=0;j<n;j++) System.out.print(a[j] + " " ) ; System.out.println("") ; } }}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/27 17:48