排序算法之(一)冒泡排序

原理:

  1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  2. 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
  3. 针对所有的元素重复以上的步骤,除了最后一个。
  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

简单理解为:
第一次找到所有元素中最大的一个放在最后一个位置上,不再变动;第二次找到剩余元素中最大的放在倒数第二个位置上,不再变动;依次类推,直到完成排序

比较时既可以采用“下沉”的方式(即从小到大),也可以使用“上浮”的方式(即从大到小)实现。

思路:

  1. n个数冒n-1轮
  2. 每一轮都从第一个元素开始冒
  3. 冒出来的数就不带他玩了
  4. 每次都是和它的下一个元素比

举例说明:

排序数组int[] arr={6,3,8,2,9,1};


第一轮冒泡:
  • 第一次排序:6和3比较,6大于3,交换位置,{3,6,8,2,9,1}
  • 第二次排序:6和8比较,6小于8,不交换位置,{3,6,8,2,9,1}
  • 第三次排序:8和2比较,8大于2,交换位置,{3,6,2,8,9,1}
  • 第四次排序:8和9比较,8小于9,不交换位置,{3,6,2,8,9,1}
  • 第五次排序:9和1比较:9大于1,交换位置,{3,6,2,8,1,9}

第二轮冒泡:
  • 第一次排序:3和6比较,3小于6,不交换位置,{3,6,2,8,1,9}
  • 第二次排序:6和2比较,6大于2,交换位置,{3,2,6,8,1,9}
  • 第三次排序:6和8比较,6大于8,不交换位置,{3,2,6,8,1,9}
  • 第四次排序:8和1比较,8大于1,交换位置,{3,2,6,1,8,9}

第三轮冒泡:
  • 第一次排序:3和2比较,3大于2,交换位置,{2,3,6,1,8,9}
  • 第二次排序:3和6比较,3小于6,不交换位置,{2,3,6,1,8,9}
  • 第三次排序:6和1比较,6大于1,交换位置,{2,3,1,6,8,9}

第四轮冒泡:
  • 第一次排序:2和3比较,2小于3,不交换位置,{2,3,1,6,8,9}
  • 第二次排序:3和1比较,3大于1,交换位置,{2,1,3,6,8,9}

第五轮冒泡:
  • 第一次排序:2和1比较,2大于1,交换位置,{1,2,3,6,8,9}

Java代码实现:

package com.learn.demo.sort;
/**
 * 冒泡排序
 */
public class BubbleSort {
    public static void main(String[] args) {
        int[] arr={6,3,8,2,9,1};
        System.out.println("排序前数组为:");
        for(int num:arr){
            System.out.print("  "+num+" ");
        }
        System.out.println();
        //数组下标从0开始
        for(int i=0; i<arr.length-1; i++){//外层循环控制排序趟数
            boolean result = false;//排序中是否进行交换顺序
            for(int j=0; j<arr.length-1-i; j++){//内层循环控制每一趟排序多少次
                if(arr[j]>arr[j+1]){
                    int temp=arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=temp;
                }
                System.out.print("是否交换位置:"+result+"   ");
                System.out.println("排序"+(i+1)+"趟"+(j+1)+"次后数组为:");
                for(int num:arr){
                    System.out.print("  "+num+" ");
                }
                System.out.println();
            }
        }
        System.out.println();
        System.out.println("排序后的数组为:");
        for(int num:arr){
            System.out.print("  "+num+" ");
        }
    }
}

demo运行后控制台的输出如下图:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_39548700/article/details/84876800