题目
分析
1.冒泡排序
for (int i = 0; i < arr.length; i++) { for (int j = 0; j < arr.length - i -1; j++) { if (arr[j] > arr[j + 1]) { int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } }
Q:为什么需要两个循环
A:i循环是把第i个数排到正确的最后的位置,i代表排的数字,j代表比较的数字,需要把所有的数字(i) 都 进行比较(j)后才能得出最终答案
Q:为什么j<arr.length-i-1
A:因为i是代表有有几个数已经排到了自己对的位置,还剩下arr.length-i个的位置不对,由于循环中对比的是j j+1 所以j+1不能过界,推出来j小于arr.length-i-1
代码
1 import java.util.*; 2 public class Main { 3 public static void main(String[] args) { 4 @SuppressWarnings("resource") 5 Scanner sc = new Scanner(System.in); 6 int n = sc.nextInt(); 7 int [] a = new int[n]; 8 int m= 0 ; 9 for(int i=0;i<n;i++) { 10 a[i]=sc.nextInt(); 11 } 12 for(int i=0;i<n;i++) 13 for(int j=0;j<n-i-1;j++) { 14 if(a[j+1]<a[j]) { 15 m=a[j]; 16 a[j]=a[j+1]; 17 a[j+1]=m; 18 } 19 } 20 for(int i=0;i<n;i++) { 21 System.out.printf(a[i]+" "); 22 } 23 24 } 25 26 }