冒泡排序

冒泡排序原理:

  从左往右,依次比较相邻两个元素的大小,如果第一个元素大于第二个元素,就进行交换位置,第一轮比较结束就会将最大的元素放到最后;

  再进行除了最后一个元素之外的元素的比较,确定第二大的元素,放到倒数第二的位置上;

  继续上述比较,直到只剩最后一个元素需要比较为止;

示例说明:

  对于数组[36,76,44,21,66,18]来说,

  第一轮:

    36<76,不用交换位置;

    76<44,交换位置,数组变为[36,44,76,21,66,18];

    76>21,交换位置,数组变为[36,44,21,76,66,18];

    76>66,交换位置,数组变为[36,44,21,66,76,18];

    76>18,交换位置,数组变为[36,44,21,66,18,76];

    可见最大的元素已经确定,而且不用再参加比较,数组变为[36,44,21,66,18,76].

  第二轮:

    36<44,不用交换位置;

    44>21,交换位置,数组变为[36,21,44,66,18,76];

    44<66,不用交换位置;

    66>18,交换位置,数组变为[36,21,44,18,66,76];

    可见除了第一轮最大的元素之外的最大元素也确定了位置,数组变成[36,21,44,18,66,76],

  第三轮: 

    36>21,交换位置,数组变为[21,36,44,18,66,76];

    36<44,不用交换位置;

    44>18,交换位置,数组变为[21,36,18,44,66,76];

    第三大的元素确定了位置,数组变成[21,36,18,44,66,76].

  第四轮:

    25<36,不用交换位置;

    36>18,交换位置,数组变成[25,18,36,44,66,76];

    第四大的元素确定了位置,数组变成[25,18,36,44,66,76].

  第五轮:

    25>18,交换位置,数组变成[18,25,36,44,66,76];

    这时就剩下了最后一个元素25没确定位置,而且不需要再比较,那么排序后的数组就为[18,25,36,44,66,76].

总结:

  从示例中可以看出,6个元素之间只需要(元素数-1)轮的比较,每一轮中的比较次数为(元素数-轮数)

Java代码实现:

package com.yg.study;

public class BubbleSort {

    public static void main(String[] args) {
        int[] arr= {36,76,44,21,66,18};
        doSort(arr);
        System.out.println("=============排序结果展示===============");        //可以去掉    
        for (int i : arr) {
            System.out.print(i+"\t");
        }
    }

    private static void doSort(int[] arr) {
        for(int i=0;i<arr.length-1;i++) {        //-1是确定要比较的轮数
            System.out.println("************第"+(i+1)+"轮比较************");        //用于区分每一轮比较结果,可以去掉
            for (int j = 0; j < arr.length-1-i; j++) {        //-1是为了防止数组下标越界,-i是用于排除最后一个元素参与比较
                if(arr[j]>arr[j+1]) {        //如果前一个元素大于后一个元素,进行位置交换
                    int temp=arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=temp;
                }
                
                for (int k : arr) {        //用于打印每一次比较的结果,可以去掉
                    System.out.print(k+"\t");
                }
                System.out.println();    //用于区分每一次比较的结果,可以去掉
            }
        }
        
    }

}

 

 

结果展示:

 

  

    

 

posted @ 2019-01-23 18:12  安徒生敲代码  阅读(196)  评论(0编辑  收藏  举报