冒泡排序详解

什么是冒泡排序呢?

简单来说
就是第一轮就是第一个和第二个比较.
然后第二个与第三个比较.
第三个与第四个比较.
第四个和第五个比较....以此类推,直到最后一个两两比较
.
然后第二轮就是第一个和第二个比较.
 第二个和第三个比较.
 第三个和第四个比较,
 第四个与第五个比较....依次类推,直到上一轮比较的个数减1个
 (比如这个数组是10个, 然后上一轮比较了10个, 那么这一轮就比较9个)
 
 然后第三轮就是第一个和第二个比较.
 第二个和第三个比较.
 第三个和第四个比较,
 第四个与第五个比较....依次类推,直到上一轮比较的个数减1个
 (比如这个数组是10个, 然后上一轮比较了9个, 那么这一轮就比较8个)

.
这里我用Java的语法假设我们定义了一个数组a[5],然后赋值.

int[] arr = {18, 6, 19, 3, 9};

画个图是这样的
下标为0的开始的进行比较

在这里插入图片描述
我们求它的升序-----也就是说从小到大
画图是这样的(图很多下面有链接可以直接下载看)
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
然后第二轮重新从下标0开始比较
在这里插入图片描述在这里插入图片描述在这里插入图片描述
然后第三轮也重新从下标0开始比较
在这里插入图片描述在这里插入图片描述
最后进行第四轮第1次比较
在这里插入图片描述

这样我们就完成了冒泡排序

简略型图解
在这里插入图片描述

图片链接:百度网盘

下面是java源代码

public class day05_08 {     //类名
    public static void main(String[] args){         //主函数
        int[] arr = {18, 6, 19, 3, 9};      //定义一个数组
        int temp;                           //定一个临时变量, 可以进行互换

        System.out.print("排序前的数组:");
        for(int i = 0; i < arr.length; i++)             //排序前遍历输出
        {
            System.out.print("arr["+i+"]="+arr[i]+"   ");
        }
        System.out.println();   //换行

        for(int i = 0; i < arr.length-1; i++)     //因为最后一个不用进行比较,所以长度要减1
        {
            for(int j =0; j < arr.length-1-i; j++)  //j必须小于数组的长度减1避免越界
            {                                       //然后减i是因为每次经过i次循环后,后面就要有i个不进行比较的
                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+"]="+arr[i]+"   ");
        }

    }
}

代码执行之后的结果
在这里插入图片描述
下面这个是利用自定义函数写的源代码:

public class day05_09 {         //类名
    public static void main(String[] args){     //主函数
        int[] arr = {18, 6, 19, 3, 9};      //定义一个数组
        printArray(arr);        //输出排序前的数组
        sort(arr);              //冒泡排序
        printArray(arr);        //输出排序后的数组
    }

    //函数功能:冒泡排序
    public static void sort(int[] arr){
        for(int i = 0; i < arr.length-1; i++)    //因为最后一个不用比较,所以数组长度要减1
        {
            for(int j = 0; j < arr.length-1-i; j++) //这里如果不减1,数组会越界
            {                                       //减i是因为每次循环一次,后面就有一个已经是最大值,所以执行i次就减i
                if(comparison(arr[j], arr[j+1]))
                {
                    swap(arr,j,j+1);
                }
            }
        }
    }

    //函数功能:比较两个数的大小,如果第一个大就true, 第二个大就false
    public static boolean comparison(int a, int b) {
        if(a > b)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    //函数功能:数值互换
    public static void swap(int[] arr, int i, int j) {
        int temp;
        temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }

    //函数功能:输出数组
    public static void printArray(int[] arr)
    {
        for(int i = 0; i < arr.length; i++)
        {
            System.out.print("arr["+i+"]="+arr[i]+"  ");
        }
        System.out.println();
    }
}

输出的结果还是和上图一样的,这里就不放出来了

不管用什么语言写代码,本质上都是这样子实现的!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值