冒泡排序算法

  • 冒泡排序算法运行起来非常的慢,但是在概念上它是排序算法中最简单的,因为冒泡排序算法在刚开始研究排序技术时是一个非常好的算法
使用冒泡排序对一个班的学生进行排序
  • 如果人近视的像计算机程序一样,只能看到站在他面前两个相邻的同学,在这种困难的情况下,如何对同学进行排序呢?假设n个学生,并且按照从左到右分别编号,从0-n-1。
  • 冒泡排序的流程如下,从最左边的同学,也就是0号同学开始比较,最开始比较的是0到1,那么0号高与1号的话。就换成一号的位置,然后继续向后比较,如果左边得高就继续交换位置,排序过程如图!在这里插入图片描述在这里插入图片描述以下是规则
  • 1.比较两个同学
  • 2.如果左边得同学高,则两个同学交换位置
  • 3.向右移动一个位置,继续比较右边的同学,如果右边的同学高则用右边的同学比较
  • 4.按照这个顺序一直比较下去,一直比较到队伍的最右端,虽然没有完全把所有的队员都排好序,但是已经确定最右边的那个同学是最高的,因为在比较的时候,只要遇到高的球员才会交换位置,直到最右边
  • 这个也是称为冒泡排序的原因,因为在执行算法的时候,最大的数据项的总是“冒泡”到数组的最顶端
    第一次排序的结果在这里插入图片描述在对所有的同学进行了第一次比较之后,进行了n-1次比较,并且按照队员的开始位置进行了最少0次,最多进行了n-1次比较,数组最末端的那个数据项就此确定,不需要移动了。
    同上进行第二次比较,再一次的从左到右,两两比较,并且在适当的时候交换了位置,这一次最终只需要比较到右边的第二个同学的位置(n-2),因为最高的已经站在了最后的位置(n-1),
    在不断的执行这个过程中,所有的队员都排定。
    上代码
 int[] arr = {12, 102, 28, 78, 45, 63, 45, 21, 4, 1, 52, 49, 88, 36, 2, 35, 61, 44, 66, 46};
        int len = arr.length;
        int temp;
//        len - 1 是因为最大的下标为数组的长度减一
        for (int i = 0; i < len - 1; i++) {
//            len-i-1我上面说了是因为第一次循环是n-1  第二次是n-2 ....
            for (int j = 0; j < len - 1 - i; j++) {
//                从左边得第一个和第二个依次进行比较  如果左边大于右边则进行下面的交换否则继续运行
                if (arr[j] > arr[j + 1]) {
//                    如果第一个大于第二个 就先存进temp
                    temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
      for (int k = 0;k<arr.length;k++){
          System.out.print(arr[k]+",");
      }

输出
在这里插入图片描述

冒泡排序的效率

通过上面的比较 我们会发现,第一次比较进行了n-1次比较,第二次进行了n-2次比较,以此类推,最后进行了一次比较
这种排序算法的速度是很慢的,但是在排序算法中它无疑是最简单的也是一个比较经典的排序算法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值