理解冒泡排序

原理

    假定待排序的序列为5、4、3、2、1,我们最终需要排列为1、2、3、4、5,冒泡排序的原理为将序列分为待排序序列和已排序序列,默认所有的数字都在待排序的序列中,后面每1轮排序中,将最大的数字挪到最右边,比如第1轮将5挪到最右边,5就加入到了已排序的序列,第二轮将4挪到最右边,也就是5的前面,4就加入到了已排序序列里,以此类推。放到程序里,一般是通过2次for循环来实现,第1次循环是从第1个数字开始,到倒数第2个数字为止,原因是冒泡排序是当前元素跟后面的元素进行比对,如果循环到最后一个元素,后面就没有元素了。第2次循环也是从第1个数字开始,跟第1次循环不同的是第2次循环不是到倒数第2个数字为止,而是到倒数第2个数字再减外层循环的当前次数为止,原因是每次执行外层循环的时候,已经将最大值挪到了最右侧,也就是右侧已经是最大值的排序序列,所以在执行内循环时,只需要循环到待排序的末尾就行了。

图解

红色:代表每一轮冒泡的过程。
蓝色:已排序队列。
无色:待排序队列。

WX20190625-180832@2x.png

Java代码实现

    /**
     * 冒泡排序
     * @param arr
     */
    public static int[] maoPao(int[] arr) {
        // 从第1个元素开始,倒数第2个元素止。
        for(int i = 0;i<arr.length-1;i++){
            // 第1个元素开始,倒数第2个元素下标减当前外循环下标止。
            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;
                }
            }
        }
        return arr;
    }

    public static void main(String[] args) {
        int[] arr = {5,4,2,3,1};
        int[] resultArray = SortUtils.maoPao(arr);
        String result = Arrays.toString(resultArray);
        System.out.println(result);
    }



©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 排序的基本概念 在计算机程序开发过程中,经常需要一组数据元素(或记录)按某个关键字进行排序,排序完成的序列可用于快...
    Jack921阅读 1,588评论 1 4
  • 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    蚁前阅读 5,330评论 0 52
  • 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 将一个记录插入到已排序好...
    依依玖玥阅读 1,365评论 0 2
  • 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    printf200阅读 864评论 0 0
  • 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    zwb_jianshu阅读 1,457评论 0 0

友情链接更多精彩内容