冒泡排序算法 :BubbleSort

java中的经典算法:冒泡排序算法

$. 可以理解成当你静止一杯可乐时,里面的CO2随着你的静止,由于不不易溶于水的性质,

    且会以气泡的形式逐渐向上漂浮。越大的气泡上浮速度越快。

冒泡排序算法的原理于此相似。 每次进行相邻值之间的替换;

    大的值(元素)排在小的值(元素)前面  ,或者小的值(元素) 排在大的值(元素)前面。

 

import java.util.Arrays;

/*
* 冒泡排序算法
* */
public class BubbleSort {

    public static void main(String[] args) {

        int[] arr = {1, 35, 64, 24, 7, 6, 8, 46, 3, 34}; //定义10个数
        for (int i = 0; i < arr.length - 1; i++) {  //控制多少次循环
            System.out.println("循环次数:"+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;
                }
                System.out.println("排序次数:"+ j);
            }
        }
        for (int num:arr){
            System.out.println(Arrays.asList(num));  //采用集合的方式更直观的看结果
        }

    }
}

外层for控制着循环次数,内层for控制每次循环所需要的排序次数。

共进行8次循环,每次排序的次数以此递减。

冒泡排序算法 :BubbleSort_第1张图片

 

    第九次因为只有一个元素无需排序,所以直接输出结果。所以只存在8次循环排序。

 

    每循环一次排序当前相邻数大小关系。

 if (arr[j] > arr[j + 1]) {     //替换
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }

  使用temp相当于一个中介寄存。

传递方式如下:

冒泡排序算法 :BubbleSort_第2张图片

在冒泡排序中,相邻大的元素(小的元素)替换小的元素(大的元素)。

下图为第一次排序的一个步骤。 

冒泡排序算法 :BubbleSort_第3张图片

arr[0] < arr[1]不做变化

arr[1] < arr[2]:不做变化

arr[2] > arr[3]:替换

替换后的当前arr[2] = 24  arr[3] = 64

arr[3] > arr[4] : 替换

替换后的arr[3] = 7  arr[4] = 64

以此类推,大的值(元素)往前调,小的值(元素)往后调。

当循环到最后一次时,只有一个数,所以最后一次不需要循环, 所以 

i < arr.length - 1

 每循环一次一次进行排序时总是去除上次最后一个值,所以

j < arr.length - i - 1

 

你可能感兴趣的:(冒泡排序算法 :BubbleSort)