用java实现冒泡排序

冒泡排序

算法思想

  • 将待比较元素从左往右或者从右往左进行**两两比较**,如果出现反序,则交换两个元素的位置,直到没有反序记录为止。
  • 冒泡排序算法结束的条件是在一趟排序过程中,从始至终都没有发生交换两个元素位的置操作,其每一趟都能确定一个最大值,该最大值不再参与下一趟排序

例如:有下列5个元素,(52  49  80  36  58)使用冒泡排序进行排序(该案例以从左往右,进行升序排序)


第一趟排序(以原始数据  52  49  80  36  58  为基础)

52和49比较,出现反序交换两个元素位置                    49  52  80  36  58

52和80比较,未出现反序,不交换位置                        49  52  80  36  58

80和36比较,出现反序交换两个元素位置                    49  52  36  80  58

80和58比较,出现反序交换两个元素位置                    49  52  36  58  80        

(第一趟确定了 一个最大值80)                        红色字体部分为该趟或者前几趟已经确定的最大值


第二趟排序(以第一趟排序结果  49  52  36  58  80  为基础)

49和52比较,未出现反序,不交换位置                        49  52  36  58  80 

52和36比较,出现反序交换两个元素位置                    49  36  52  58  80

52和58比较,未出现反序,不交换位置                        49  36  52  58  80        

(第二趟确定了一个次最大值58),80为上一趟比较出的最大值,无需参与该次比较


第三趟排序(以第二趟排序结果  49  36  52  58  80  为基础)

49和36比较,出现反序交换两个元素位置                    36  49  52  58  80

49和52比较,未出现反序,不交换位置                        36  49  52  58  80        

(第三趟确定了一个次最大值52),58和80为前两趟比较出的最大值,无需参与该次比较


第四趟排序(以第三趟排序结果  36  49  52  58  80  为基础)                                

36和49比较,未出现反序,不交换位置                        36  49  52  58  80        

此时36已经没有其他元素能和它比较 ,所以到这里就没有下一轮比较了,排序结束

(第四趟确定了一个次最大值49),52、58和80为前∏趟比较出的最大值,无需参与该次比较

其排序的最终结果就为最后一趟排序的结果  36  49  52  58  80


用java代码实现

package SortingAlgorithm;

public class Test_BubbleSort {
    public static void main(String[] args) {
        int[] arr = {52,49,80,36,58};
        int temp = 0;       //定义一个中间变量用来辅助交换两个元素的位置

        //第一个for循环控制比较的趟数
        for (int i = 0; i < arr.length-1; i++) {
            //n个元素需要进行n-1趟排序,所以循环条件为: 元素个数(数组长度)-1
            //从上面的案例中也可以看出,总共5个元素,进行了4趟排序确定了最终的排序结果

            for (int j = 0; j < arr.length-1-i; j++) {

                //第二个for循环控制每一次比较的步骤
                //比较时,只要两个比较的元素发生反序,就交换两个元素的位置

                if (arr[j] > arr[j+1]){         //若是想让排序好的元素呈降序,只需把该行的 > 号改为 < 号即可
                    //以下三个步骤就是发生逆序时两个元素交换的方式
                    temp = arr[j];
                    arr[j] =arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }
        //排序完成后,循环遍历打印出整个数组排序后的结果
        System.out.print("排序的结果为:");
        for (int i = 0;i< arr.length;i++){
            System.out.print(arr[i] +" ");
        }
    }
}

排序的结果为:36 49 52 58 80 


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值