Java实现冒泡排序

孤者浪人 提交于 2020-01-28 05:03:57

首先我们先了解一下什么是冒泡排序
冒泡排序:就是给定一个数组,然后依次从左到右相邻的两个数两两比较,如果是升序排列,如果前面一个数大于后面一个数就交换位置,直到遍历到最后一个,然后进行第二轮的比较,第二轮的比较仍然从第一数开始,进行两两比较,然后进行第三轮,依次类推
下面我们举例来具体阐述一下:
给定一个数组,进行排序:2,6,1,3,8,5从小到大的顺序排列
第一轮:遍历整个数组,相邻两个两两比较,如果前面大于后面,就交换
2,6,1,3,8,5—>2,1,6,3,8,5—》2,1,3,6,8,5—》2,1,3,6,8,5—-》2,1,3,6,5,8
那么第一轮比较就结束了最后的结果:2,1,3,6,5,8
那么我们用代码实现这个过程
在这个之前我们先了解一下Java中数组类型的变量的声明和赋值以及遍历打印

//先定义一个数组,由于数组是对象,所以定义的时候应该new一下
 //在定义数组的同时进行快速赋值
     int[] num = new int[]{2,6,1,3,8,5};
     System.out.println(num);//这里打印只是一个数组的引用的地址
     //遍历的方法打印数组
     for(int i=0;i<num.length;i++){
         System.out.print(num[i]+",");
     }
     System.out.println("\n");
     //foreach的方法快速打印和遍历数组
     //这里的i表示的数组的每一个元素的值,而不是下标
     for(int i:num){
         System.out.print(i+",");
     }
     System.out.println("\n");
     //字符数组的声明和遍历打印
     String[] str= new String[]{"hello","world"};
     for(String i:str){
         System.out.println(i+",");
     }

下面我们实现第一轮

//定义一个数组并进行快速赋值
       int[] num = new int[]{2,6,1,3,8,5};
       //升序排列
       //两两比较
       int temp;
       for(int i=0;i<num.length-1;i++){
           //一定要注意我们后面比较的是i和i+1
           //所以这里的i的终止条件为num.length-1
           //防止溢出
           if(num[i]>num[i+1]){
               temp=num[i];
               num[i]=num[i+1];
               num[i+1]=temp;
           }
       }
    for(int i:num){
        System.out.print(i+" ");
    }
    ---》2 1 3 6 5 8 
 //定义一个数组并进行快速赋值
       int[] num = new int[]{6,5,4,3,2,1};
       for(int i:num){
           System.out.print(i+" ");
       }
       System.out.println("\n");
       //升序排列
       //两两比较
       int temp;
       int count=0;
       for(int j=0;j<num.length-1;j++){
           //如果将每次循环的结果打印出来我们可以看到
           //事实上外层循环只需要num.length-1次就行了
           for(int i=0;i<num.length-j-1;i++){
               //这里第一轮将最大值移动到了最后,
               //所以第二轮只需要比较前面五个数就行了
               //所以内层循环就是num.length-1
               //一定要注意我们后面比较的是i和i+1
               //所以这里的i的终止条件为num.length-1
               //防止溢出
               if(num[i]>num[i+1]){
                   temp=num[i];
                   num[i]=num[i+1];
                   num[i+1]=temp;
               }
           }
           count++;
           System.out.print("第"+count+"次:");
        for(int i:num){
            System.out.print(i+" ");

        }
        System.out.println("\n");
       }
      这里我们利用最坏的结果来举例 6 5 4 3 2 1 ,将它从小到大的顺序排列

第1次:5 4 3 2 1 6 

第2次:4 3 2 1 5 6 

第3次:3 2 1 4 5 6 

第4次:2 1 3 4 5 6 

第5次:1 2 3 4 5 6 

对于冒泡排序我们的思路就是要先写内层循环,然后再写外层循环,内层循环的次数是随着循环的进行而减少的,最后一次我们只需要比较两个数就行了,然后对于外层循环,同样也是只需要length-1就行了,我们可以通过将每次的循环结果打印出来就可以知道

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!