算法初级_Question8_冒泡排序(java实现)

这篇文章讲述的是算法初级部分的冒泡排序问题的java实现,参考的书籍为清华大学出版社出版,贾蓓等编著的《c语言趣味编程1000例》,如有错误或者不当之处,还望各位大神批评指正。

问题描述

对N个整数进行升序排列

算法分析

冒泡排序是经典的一个问题,过程如下:

假设对四个整数进行冒泡排序5,2,6,1
下面对第一趟排序进行详细分析:
2与5比较,2<5,不交换
5与6比较,5<6,不交换
6与1比较,6>1,交换
第一趟结果:2,5,1,6
以此类推…
第一趟:2,5,1,6
第二趟:2,1,5,6
第三趟:1,2,5,6

完成排序

代码实现

public class Q8_BubbleSort {
    /**
     *  问题描述:对N个整数进行升序排列
     *  
     *  算法分析:冒泡排序是经典的一个问题,过程如下:
     *             假设对四个整数进行冒泡排序5,2,6,1
     *           下面对第一趟排序进行详细分析:
     *             2与5比较,2<5,不交换                     
     *             5与6比较,5<6,不交换                         
     *             6与1比较,6>1,交换                        
     *             第一趟结果:2,5,1,6
     *           以此类推
     *             第一趟:2,5,1,6
     *             第二趟:2,1,5,6
     *             第三趟:1,2,5,6
     *             完成排序
     *           
     *           由此可见冒泡排序是通过两两比较如果前者比后者大,则交换
     *           (a,b交换这样写:c=a,a=b,b=c)每一趟都将最大的数放到最终
     *           位置,进行N-1趟比较
     */
    public static void main(String[] args) {
        List<Integer>arr = new ArrayList<>() ;    //用于存放输入list的值
        System.out.println("请输入排序的个数:");
        Scanner scanner = new Scanner(System.in);
        int N = scanner.nextInt() ;
        System.out.println("请输入"+N+"个要排序的数:");
        while(N>0){
            arr.add(scanner.nextInt()) ;
            N-- ;
        }
        scanner.close();
        for(int i=0 ; i<arr.size() ; i++)       //一共执行N-1趟
            for(int j=0 ; j<arr.size() ; j++){
                if(arr.get(i) < arr.get(j)){        //若前者小于后者则交换
                    int c = arr.get(i) ;
                    arr.set(i, arr.get(j)) ;
                    arr.set(j, c) ;
                }
            }
        System.out.println(arr);
    }
}

样例输出

  • 输入
7
5 3 9 6 8 2 7
  • 输出
[2, 3, 5, 6, 7, 8, 9]

猜你喜欢

转载自blog.csdn.net/u013634252/article/details/80813893
今日推荐