zoukankan      html  css  js  c++  java
  • java基础面试题7--数组高级-冒泡排序

    冒泡排序


    * 冒泡排序基本概念是:
    * 依次比较相邻的两个数,将小数放在前面,大数放在后面。
    * 即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。
    * 然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,
    * 直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,
    * 将最大的数放到了最后。在第二趟:仍从第一对数开始比较
    * (因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),
    * 将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),
    * 第二趟结束,在倒数第二的位置上得到一个新的最大数
    * (其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。

    掌握主要规律:每一趟遍历总能将最大的数沉底!!!

    原理图:
    这里写图片描述

    package sort;
    
    public class BubbleSort {
    
        public static void bubbleSort(int [] arr){
    //      x:控制外循环趟数,最多需要n-1趟(例:数组长度10,需要比较9趟),
    //每一次将最大的数沉底!第一次完毕之后,最大值出现在了最大索引处
            for(int x = 0; x<arr.length-1; x++){
                //y:控制内循环比较次数,比较次数是递减的,因为大的数已经排好了序,放到了最后面,不需要再比较
                for(int y = 0; y<arr.length-1-x; y++){
                    if(arr[y] > arr[y+1]){
                        System.out.println("本次交换的数:"+arr[y]+"->"+arr[y+1]);
                        int temp = arr[y];
                        arr[y] = arr[y+1];
                        arr[y+1] = temp;
                    }
                }
                System.out.println("第"+(x+1)+"趟比较完的结果:");
                printArray(arr);
            }
        }
    
        public static void printArray(int [] arr){
            System.out.print("[");
            for(int x=0;x<arr.length;x++){
                if(x==arr.length-1){
                    System.out.print(arr[x]+"]");
                    System.out.println();
                }else{
                    System.out.print(arr[x]+", ");
                }
            }
        }
        /**
         * @param args
         */
        public static void main(String[] args) {
    
            int [] a = new int[]{10 ,9, 8, 7, 6, 5, 4, 3, 2, 1};
            System.out.println("开始排序");
            printArray(a);
    
            bubbleSort(a);
            System.out.println("结束排序");
            printArray(a);
    
        }
    
    }
    
    开始排序
    [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
    本次交换的数:10->9
    本次交换的数:10->8
    本次交换的数:10->7
    本次交换的数:10->6
    本次交换的数:10->5
    本次交换的数:10->4
    本次交换的数:10->3
    本次交换的数:10->2
    本次交换的数:10->11趟比较完的结果:
    [9, 8, 7, 6, 5, 4, 3, 2, 1, 10]
    本次交换的数:9->8
    本次交换的数:9->7
    本次交换的数:9->6
    本次交换的数:9->5
    本次交换的数:9->4
    本次交换的数:9->3
    本次交换的数:9->2
    本次交换的数:9->12趟比较完的结果:
    [8, 7, 6, 5, 4, 3, 2, 1, 9, 10]
    本次交换的数:8->7
    本次交换的数:8->6
    本次交换的数:8->5
    本次交换的数:8->4
    本次交换的数:8->3
    本次交换的数:8->2
    本次交换的数:8->13趟比较完的结果:
    [7, 6, 5, 4, 3, 2, 1, 8, 9, 10]
    本次交换的数:7->6
    本次交换的数:7->5
    本次交换的数:7->4
    本次交换的数:7->3
    本次交换的数:7->2
    本次交换的数:7->14趟比较完的结果:
    [6, 5, 4, 3, 2, 1, 7, 8, 9, 10]
    本次交换的数:6->5
    本次交换的数:6->4
    本次交换的数:6->3
    本次交换的数:6->2
    本次交换的数:6->15趟比较完的结果:
    [5, 4, 3, 2, 1, 6, 7, 8, 9, 10]
    本次交换的数:5->4
    本次交换的数:5->3
    本次交换的数:5->2
    本次交换的数:5->16趟比较完的结果:
    [4, 3, 2, 1, 5, 6, 7, 8, 9, 10]
    本次交换的数:4->3
    本次交换的数:4->2
    本次交换的数:4->17趟比较完的结果:
    [3, 2, 1, 4, 5, 6, 7, 8, 9, 10]
    本次交换的数:3->2
    本次交换的数:3->18趟比较完的结果:
    [2, 1, 3, 4, 5, 6, 7, 8, 9, 10]
    本次交换的数:2->19趟比较完的结果:
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    结束排序
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    
    
  • 相关阅读:
    redis持久化的几种方式
    Spring Cloud基础教程
    微服务实践三: 服务编排
    分库分表的几种常见玩法及如何解决跨库查询等问题
    Spring Cloud微服务开发笔记5——Ribbon负载均衡策略规则定制
    第1章 Python基础-Python介绍&循环语句 练习题&作业
    MySQL中 optimize table '表名'的作用
    Python3 命令行参数
    Python enumerate() 函数
    Python rpartition() 方法
  • 原文地址:https://www.cnblogs.com/shiguangmanbu2016/p/5932818.html
Copyright © 2011-2022 走看看