冒泡排序

Posted 胖头猫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了冒泡排序相关的知识,希望对你有一定的参考价值。

package com.sort;

public class BubbleSort {
    
    public static void swap(int list[], int i, int j){
        int temp;
        temp = list[i];
        list[i] = list[j];
        list[j] = temp;
        
    }
    public static void print(int list[]){
        for(int i=0;i<list.length;i++){
            System.out.println(list[i]);
        }
    }
    public static void sort01(int list[]){
        /**
         * 从前往后冒泡
         * 第1次循环(从0到9)找到最大的数放在最后一个位置(9)
         * 第2次循环(从0到8)找到第2大的数放在倒数第2的位置(8)
         * 第3次循环(从0到7)找到第2大的数放在倒数第2的位置(7)
         * 依次类推...
         * */
        for(int i=0;i<list.length-1;i++){
            for(int j=0;j<list.length-i-1;j++){
                if(list[j] > list[j+1]){
                    swap(list,j,j+1);
                }
            }
        }
    }
    
    public static void sort02(int list[]){
        /**
         * 从后往前冒泡
         * 第1次循环(从9到0)找到最小的数放在第1个位置(0)
         * 第2次循环(从9到1)找到第2小的数放在第2的位置(1)
         * 第3次循环(从9到2)找到第3小的数放在第3的位置(2)
         * 依次类推...
         * */
        
        for(int i=0;i<list.length-1;i++){
            for(int j=list.length-1-1;j>=i;j--){
                if(list[j] > list[j+1]){
                    swap(list,j,j+1);
                }
            }
        }
    }
    
    
    public static void sort03(int list[]){
        
        /**
         * 冒泡的优化
         * [2,1,3,4,5,6,7,8,9]
         * 如果序列是这样的
         * 刚开始flag=true
         * 进入循环flag=false
         * 第1次循环,flag=true,说明这次循环有数据进行了交换
         * 循环后结果:[1,2,3,4,5,6,7,8,9]
         * 进入第2次循环,flag=false,循环结束后没有进行数据交换,说明后者都大于前者,flag还是false
         * 所以就不用再进行循环了,已经排好序了
         * 
         * */
        
        boolean flag = true;
        for(int i=0;i<list.length-1 && flag;i++){
            flag = false;
            for(int j=list.length-2;j>=i;j--){
                if(list[j] > list[j+1]){
                    swap(list,j,j+1);
                    flag = true;
                }
            }
        }
        
    }
    public static void main(String[] args) {
        
        int list0[] = new int[]{3,2,5,6,4,8,7,9,0,1};
//        int list1[] = new int[]{9,8,7,6,5,4,3,2,1,0};
//        int list2[] = new int[]{2,1,3,4,5,6,7,8,9};
        sort01(list0);
//        sort02(list0);
//        sort03(list0);
        print(list0);
        
    }

}

 

以上是关于冒泡排序的主要内容,如果未能解决你的问题,请参考以下文章

java冒泡排序法代码

python代码实现鸡尾酒排序(双向冒泡排序)

冒泡排序python代码

视频+图文+动画详解冒泡排序

交换排序(冒泡排序快速排序的算法思想及代码实现)

C语言冒泡排序。