冒泡排序(Java实现)

关于冒泡排序

冒泡排序是一种交换排序,通过遍历将两两数进行比较。如果是正序排序(从小到大排序)则会把大的数放到后面,同理如果是倒序排列(从大到小排序)会把大的数放在前面。

小例子1

如:49和38进行正序排列。

对比
38
49

如果49大于38,则49与38交换位置。

小例子2

如:49、38和28进行正序排列。

原排序
49
38
28
对比
38
49

先是他们两个进行对比,发现49大于38,将49放到38的后面。
于是变成了这样

28
38
49

然后再将49和28进行对比即

对比
28
49

发现还是49大,于是将49与28交换位置。
于是就变成了这样

38
28
49

到此所有的数都与49进行了比较,算是完成了第一步。
我们可以发现在对比第一次的时候,即第一次遍历的时候,我们将最大的数放到了后面。
即如果我们将每一个数都进行这样的对比加遍历。对于一组包含n个数据的一组记录,最坏的情况是要进行n-1个排序(最后一个不用遍历因为所有比他大数都排在了后面,他是最小的)。
假定存在一个数组为a;

• 第一趟:依次比较a[0]和a[1]a[1]和a[2]a[2]和a[3]…==a[n-2]和a[n-1]==的元素。如果发现第一个数据大于后一个数据,交换它们,经过第一趟,最大的元素被排到了最后
• 第二趟:依次比较 a[0]和a[1]a[1]和a[2]a[2]和a[3]… ==a[n-2]和a[n-1]==的元素。如果发现第一个数据大于后一个数据,交换它们,经过第二趟,倒数第二大的被排到了倒数第二位
• 第n-1趟:依次比较0和1元素,如果发现第一个数据大于后一个数据,交换它们,经过第n-1趟,第2小(第n-1大)的元素排到了第2位。

小例子3

假定存在数组 98 45 87 23 15 88六个数进行冒泡排序
第一趟循环后 :45->87->23->15->88->98
第二趟循环后: 45->23->15->87->88->98
第三趟循环后: 23->15->45->87->88->98
第四趟循环后: 15->23->45->87->88->98

代码实现

public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    int []a=new int [6];//数组长度n为六
    for (int i=0;i<a.length;i++){
        a[i]=in.nextInt();
    }
    for (int i=0;i<a.length-1;i++){//循环n-1次,最后一次不用循环
    for (int j=0;j<a.length-1-i;j++){//已经比对过的不用比对所以
    //有个-i,同时要跟j+1进行比对,所以有个-1
    //-i可以省略,但是-1不行
        if (a[j]>a[j+1]){//如过a[j]大于a[j+1]
            int tmp=a[j];//进行交换
            a[j]=a[j+1];
            a[j+1]=tmp;
        }
    }
}
for (int i=0;i<a.length;i++){//输出
        System.out.print(a[i]+" ");
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值