算法基础:排序算法之冒泡排序

算法基础:排序算法之冒泡排序

实现:数列有序排序

思想:已知一个数列,令数列中相邻的两个元素一一做比较,按照小大的顺序(或从大到小的顺序),如果前一个数比后一个数大(或后一个数比前一个数大),则互换( 位置互换 ),否则就不做操作。以此类推,重复地进行直到没有相邻元素需要交换时,得出一个有序的排序数列。由于在整个排序过程中,每个元素就像是泡泡在水中往一个方向"浮动",故称之为冒泡排序。

工作原理

1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2.对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。
3.针对所有的元素重复以上的步骤,除了最后一个( 在第一轮的比较中,一个最大的元素会被“浮”到最后 )。
4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

下面以这么一个数列{50.36, 464654, 52, 556.12, 96.5, 5451.3, 554, 82, 67.7, 50.36},实现对它的顺序排序。

50.36 464654.0 52.0 556.12 96.5 5451.3 554.0 82.0 67.7 50.36

Java版实现

package simple.callback.math.sort;

/**
 * @program: psimple
 * @description:冒泡排序(Bubble Sort)
 * @author: Mr.Wang
 * @create: 2021年 01月 12日 星期二 23:29:02 CST
 **/
public class NumBubbleSort {

    public static void main(String[] args) {
        long start, time, end = 0;
        double nums[] = {50.36, 464654, 52, 556.12, 96.5, 5451.3, 554, 82, 67.7, 50.36};
        double sorts[];

        System.out.println(nums.length + "个浮点数示例测试结果:");
        start = System.currentTimeMillis();
        sorts = NumBubbleSort.bubbleSort(nums);
        end = System.currentTimeMillis();
        time = end - start;
        System.out.println("冒泡排序[start:" + start + "-end:" + end + "],用时" + time + "ms");
        System.out.print("推演排序后:");
        for (int i = 0; i < sorts.length; i++)
            System.out.print(sorts[i] + "\t");
    }

    // 冒泡排序(Bubble Sort)
    public static double[] bubbleSort(double[] nums) {
        double[] numbers = nums;
        //原数列
        System.out.print("\n冒泡排序原数列:");
        for (int z = 0; z < numbers.length; z++)
            System.out.print(numbers[z] + "\t");
        System.out.println();

        for (int i = 0; i < numbers.length; i++) {
            for (int j = 0; j < numbers.length - 1 - i; j++) {
                if (numbers[j] > numbers[j + 1]) {
                    double temp = numbers[j];
                    numbers[j] = numbers[j + 1];
                    numbers[j + 1] = temp;

                    //输出推演过程
                    System.out.print("冒泡排序推演过程[" + i + "]");
                    for (int z = 0; z < numbers.length; z++)
                        System.out.print(numbers[z] + "\t");
                    System.out.println();
                }
            }
        }
        return numbers;
    }
}

程序输出结果:

10个浮点数示例测试结果:

冒泡排序原数列:50.36	464654.0	52.0	556.12	96.5	5451.3	554.0	82.0	67.7	50.36	
冒泡排序推演过程[0]50.36	52.0	464654.0	556.12	96.5	5451.3	554.0	82.0	67.7	50.36	
冒泡排序推演过程[0]50.36	52.0	556.12	464654.0	96.5	5451.3	554.0	82.0	67.7	50.36	
冒泡排序推演过程[0]50.36	52.0	556.12	96.5	464654.0	5451.3	554.0	82.0	67.7	50.36	
冒泡排序推演过程[0]50.36	52.0	556.12	96.5	5451.3	464654.0	554.0	82.0	67.7	50.36	
冒泡排序推演过程[0]50.36	52.0	556.12	96.5	5451.3	554.0	464654.0	82.0	67.7	50.36	
冒泡排序推演过程[0]50.36	52.0	556.12	96.5	5451.3	554.0	82.0	464654.0	67.7	50.36	
冒泡排序推演过程[0]50.36	52.0	556.12	96.5	5451.3	554.0	82.0	67.7	464654.0	50.36	
冒泡排序推演过程[0]50.36	52.0	556.12	96.5	5451.3	554.0	82.0	67.7	50.36	464654.0	
冒泡排序推演过程[1]50.36	52.0	96.5	556.12	5451.3	554.0	82.0	67.7	50.36	464654.0	
冒泡排序推演过程[1]50.36	52.0	96.5	556.12	554.0	5451.3	82.0	67.7	50.36	464654.0	
冒泡排序推演过程[1]50.36	52.0	96.5	556.12	554.0	82.0	5451.3	67.7	50.36	464654.0	
冒泡排序推演过程[1]50.36	52.0	96.5	556.12	554.0	82.0	67.7	5451.3	50.36	464654.0	
冒泡排序推演过程[1]50.36	52.0	96.5	556.12	554.0	82.0	67.7	50.36	5451.3	464654.0	
冒泡排序推演过程[2]50.36	52.0	96.5	554.0	556.12	82.0	67.7	50.36	5451.3	464654.0	
冒泡排序推演过程[2]50.36	52.0	96.5	554.0	82.0	556.12	67.7	50.36	5451.3	464654.0	
冒泡排序推演过程[2]50.36	52.0	96.5	554.0	82.0	67.7	556.12	50.36	5451.3	464654.0	
冒泡排序推演过程[2]50.36	52.0	96.5	554.0	82.0	67.7	50.36	556.12	5451.3	464654.0	
冒泡排序推演过程[3]50.36	52.0	96.5	82.0	554.0	67.7	50.36	556.12	5451.3	464654.0	
冒泡排序推演过程[3]50.36	52.0	96.5	82.0	67.7	554.0	50.36	556.12	5451.3	464654.0	
冒泡排序推演过程[3]50.36	52.0	96.5	82.0	67.7	50.36	554.0	556.12	5451.3	464654.0	
冒泡排序推演过程[4]50.36	52.0	82.0	96.5	67.7	50.36	554.0	556.12	5451.3	464654.0	
冒泡排序推演过程[4]50.36	52.0	82.0	67.7	96.5	50.36	554.0	556.12	5451.3	464654.0	
冒泡排序推演过程[4]50.36	52.0	82.0	67.7	50.36	96.5	554.0	556.12	5451.3	464654.0	
冒泡排序推演过程[5]50.36	52.0	67.7	82.0	50.36	96.5	554.0	556.12	5451.3	464654.0	
冒泡排序推演过程[5]50.36	52.0	67.7	50.36	82.0	96.5	554.0	556.12	5451.3	464654.0	
冒泡排序推演过程[6]50.36	52.0	50.36	67.7	82.0	96.5	554.0	556.12	5451.3	464654.0	
冒泡排序推演过程[7]50.36	50.36	52.0	67.7	82.0	96.5	554.0	556.12	5451.3	464654.0	
冒泡排序[start:1610466309202-end:1610466309213],用时11ms
推演排序后:50.36	50.36	52.0	67.7	82.0	96.5	554.0	556.12	5451.3	464654.0	
原数列 50.36 464654.0 52.0 556.12 96.5 5451.3 554.0 82.0 67.7 50.36
次序 ↓↓↓冒泡排序程序执行推演过程
1 50.36 52.0 464654.0 556.12 96.5 5451.3 554.0 82.0 67.7 50.36
2 50.36 52.0 556.12 464654.0 96.5 5451.3 554.0 82.0 67.7 50.36
3 50.36 52.0 556.12 96.5 464654.0 5451.3 554.0 82.0 67.7 50.36
4 50.36 52.0 556.12 96.5 5451.3 464654.0 554.0 82.0 67.7 50.36
5 50.36 52.0 556.12 96.5 5451.3 554.0 464654.0 82.0 67.7 50.36
6 50.36 52.0 556.12 96.5 5451.3 554.0 82.0 464654.0 67.7 50.36
7 50.36 52.0 556.12 96.5 5451.3 554.0 82.0 67.7 464654.0 50.36
8 50.36 52.0 556.12 96.5 5451.3 554.0 82.0 67.7 50.36 464654.0
9 50.36 52.0 96.5 556.12 5451.3 554.0 82.0 67.7 50.36 464654.0
10 50.36 52.0 96.5 556.12 554.0 5451.3 82.0 67.7 50.36 464654.0
11 50.36 52.0 96.5 556.12 554.0 82.0 5451.3 67.7 50.36 464654.0
12 50.36 52.0 96.5 556.12 554.0 82.0 67.7 5451.3 50.36 464654.0
13 50.36 52.0 96.5 556.12 554.0 82.0 67.7 50.36 5451.3 464654.0
14 50.36 52.0 96.5 554.0 556.12 82.0 67.7 50.36 5451.3 464654.0
15 50.36 52.0 96.5 554.0 82.0 556.12 67.7 50.36 5451.3 464654.0
16 50.36 52.0 96.5 554.0 82.0 67.7 556.12 50.36 5451.3 464654.0
17 50.36 52.0 96.5 554.0 82.0 67.7 50.36 556.12 5451.3 464654.0
18 50.36 52.0 96.5 82.0 554.0 67.7 50.36 556.12 5451.3 464654.0
19 50.36 52.0 96.5 82.0 67.7 554.0 50.36 556.12 5451.3 464654.0
20 50.36 52.0 96.5 82.0 67.7 50.36 554.0 556.12 5451.3 464654.0
21 50.36 52.0 82.0 96.5 67.7 50.36 554.0 556.12 5451.3 464654.0
22 50.36 52.0 82.0 67.7 96.5 50.36 554.0 556.12 5451.3 464654.0
23 50.36 52.0 82.0 67.7 50.36 96.5 554.0 556.12 5451.3 464654.0
24 50.36 52.0 67.7 82.0 50.36 96.5 554.0 556.12 5451.3 464654.0
25 50.36 52.0 67.7 50.36 82.0 96.5 554.0 556.12 5451.3 464654.0
26 50.36 52.0 50.36 67.7 82.0 96.5 554.0 556.12 5451.3 464654.0
27 50.36 50.36 52.0 67.7 82.0 96.5 554.0 556.12 5451.3 464654.0
结果: 50.36 50.36 52.0 67.7 82.0 96.5 554.0 556.12 5451.3 464654.0

猜你喜欢

转载自blog.csdn.net/u014132947/article/details/112550353