java--冒泡排序

冒泡排序

1.需求:

给定一个数组,使数组有序

2.算法思路

假设排升序 首先定义一个数组

int[] A= {34,53,12,32,56,17};

既然是从小到大排序,也就是大数在后,小数在前,两数比较,大数向后。
第一趟:
先把34和53比较,34<53,故不换位置;
再53和12比较,53>12,交换位置;
53再和32比较53>32,交换位置;
53再和56比较;
53<56,位置不变;
56和17比较,56>17,交换位置。
经过一趟下来,就变成34,12,32,53,17,56。

第二趟:
34和12比较,34>12,交换位置;
34和32比较,34>32,交换位置;
34和53比较,34<53,位置不变;
53和17比较,53>17,交换位置;
经过一趟下来,就变成12,32,34,17,53,56。

第三趟:
12和32比较,12<32,位置不变;
32和34比较,32<34,位置不变;
34和17比较,34>17,交换位置;
34和53比较,34<53,位置不变;
经过这一趟下来,就变成了12,32,17,34,53,56。

第四趟:
12和32比较,12<32,位置不变;
32和17比较,32>17,交换位置;
32和34比较,32<34,位置不变。
就变成了12,17,32,34,53,56。这趟下来我们可以看到已将从小到大排列好了,但是计算机并不知道,所以还要继续。

第五趟:
12和17比较,12<17,位置不变;
就可以得到:
12,17,32,34,53,56
到此冒泡排序完成。

总结:
1.将数组中相邻元素从前往后依次进行比较,如果前一个元素比后一个元素大,则交换位置,一趟下来最大元素就在数组的末尾
2.依次从上上述过程,直到数组中所有的元素都排列好

3.算法实现

package cn.Tedu.ma.suanfa.sort;

import java.util.Arrays;

@SuppressWarnings({"all"})
public class BubbleSort {
    public static void main(String[] args) {
        int[] a= {34,53,12,32,56,17};
        System.out.println(Arrays.toString(a));
        sort(a);
//        myBubblesort1(a);
        System.out.println(Arrays.toString(a));
    }

    public static void sort(int[] a) {
        for (int i = a.length - 1; i >= 0; i--) { //i从后往前走,一轮结束,说明最大元素已经到最后位置了,下一轮j少走一格
            boolean flg = false;  //设置标志,用于判断当前数组是否已经处于有序状态
            for (int j = 0; j < i; j++) {  //j从前往后走,i走一格,j走完开头到i的所有格
                if (a[j] > a[j + 1]) {  //判断两个相邻位置的元素
                    //交换两个元素的值
                    int t = 0;
                    t = a[j];
                    a[j] = a[j + 1];
                    a[j + 1] = t;
                    //当有值交换的时候,说明数组还未有序
                    flg = true;
                }
            }
            //通过标志判断数组是否有序
            if (flg == false) {
                return;
            }
        }
    }
    /*
    执行结果:
    [354, 123, 4545, 789, 12, 456, 753, 1453, 1235]
    [123, 354, 789, 12, 456, 753, 1453, 1235, 4545]
    [123, 354, 12, 456, 753, 789, 1235, 1453, 4545]
    [123, 12, 354, 456, 753, 789, 1235, 1453, 4545]
    [12, 123, 354, 456, 753, 789, 1235, 1453, 4545]
    [12, 123, 354, 456, 753, 789, 1235, 1453, 4545]
    [12, 123, 354, 456, 753, 789, 1235, 1453, 4545]
     */

    //最笨 效率最低的一种解法
    public static void myBubblesort(int[] array) {
        for (int i = 0; i < array.length; i++) {  //有多少个元素 里层跑多少轮 一个一个的比
            for (int j = 0; j < array.length - 1; j++) { //从第一个一直比较到最后一个元素
                //交换元素位置
                if (array[j] > array[j + 1]) {
                    int tmp = 0;
                    tmp = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = tmp;
                }
            }
        }
    }

    //优化后的代码----原文链接:https://blog.csdn.net/weixin_44580000/article/details/124668217
    //与第一个解法有异曲同工之妙 只不过是i从0开始走,到array.length-1 j从0到arr.lrngth-1-i
    public static void myBubblesort1(int[] array) {
        for (int i = 0; i < array.length - 1; i++) {
            boolean flg = false;
            for (int j = 0; j < array.length - 1 - i; j++) {
                if (array[j] > array[j + 1]) {
                    int tmp = 0;
                    tmp = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = tmp;
                    flg = true;
                }
            }
            if (flg == false) {
                return;
            }
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值