蓝桥杯-基础练习-数列排序

题目

分析

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 }

猜你喜欢

转载自www.cnblogs.com/zhefublog/p/12544655.html