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

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

实现:数列有序排序

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

工作原理

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

 

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

50.36464654.052.0556.1296.55451.3554.082.067.750.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.36464654.052.0556.1296.55451.3554.082.067.750.36
次序↓↓↓冒泡排序程序执行推演过程
150.3652.0464654.0556.1296.55451.3554.082.067.750.36
250.3652.0556.12464654.096.55451.3554.082.067.750.36
350.3652.0556.1296.5464654.05451.3554.082.067.750.36
450.3652.0556.1296.55451.3464654.0554.082.067.750.36
550.3652.0556.1296.55451.3554.0464654.082.067.750.36
650.3652.0556.1296.55451.3554.082.0464654.067.750.36
750.3652.0556.1296.55451.3554.082.067.7464654.050.36
850.3652.0556.1296.55451.3554.082.067.750.36464654.0
950.3652.096.5556.125451.3554.082.067.750.36464654.0
1050.3652.096.5556.12554.05451.382.067.750.36464654.0
1150.3652.096.5556.12554.082.05451.367.750.36464654.0
1250.3652.096.5556.12554.082.067.75451.350.36464654.0
1350.3652.096.5556.12554.082.067.750.365451.3464654.0
1450.3652.096.5554.0556.1282.067.750.365451.3464654.0
1550.3652.096.5554.082.0556.1267.750.365451.3464654.0
1650.3652.096.5554.082.067.7556.1250.365451.3464654.0
1750.3652.096.5554.082.067.750.36556.125451.3464654.0
1850.3652.096.582.0554.067.750.36556.125451.3464654.0
1950.3652.096.582.067.7554.050.36556.125451.3464654.0
2050.3652.096.582.067.750.36554.0556.125451.3464654.0
2150.3652.082.096.567.750.36554.0556.125451.3464654.0
2250.3652.082.067.796.550.36554.0556.125451.3464654.0
2350.3652.082.067.750.3696.5554.0556.125451.3464654.0
2450.3652.067.782.050.3696.5554.0556.125451.3464654.0
2550.3652.067.750.3682.096.5554.0556.125451.3464654.0
2650.3652.050.3667.782.096.5554.0556.125451.3464654.0
2750.3650.3652.067.782.096.5554.0556.125451.3464654.0
结果:50.3650.3652.067.782.096.5554.0556.125451.3464654.0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dnbug Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值