冒泡排序的算法

思想(升序):

  1.比较两个相邻数据之间的大小,保证大的值在后面,最后,经过一次排序后会选出本次数组中的最大值,放在最后一位;

  2.在排除上一次的最大值数组中,再选出一位最大值放在最后一位;

  3.直到排除(选出)数组长度-1个最大值后,排序完成;

比如:数组为{10  ,34  ,300  ,56  ,6,  56  ,7  ,87  ,  5}数组长度为9;

  

public class find_em {
    public static void main(String[] args){
        int arr[]={10,34,300,56,6,56,7,87,5};
        System.out.println("原始数据:");
        for(int i=0;i<arr.length;i++){
            System.out.print(arr[i]+"	");
        }
        System.out.println("
排序(升序):");
        
        //冒泡排序
        for(int j=1;j<arr.length;j++){  //控制循环次数,也就是选出几个最大值后停止
            for(int i=0;i<arr.length-j;i++){  //交换数据,选出最大值
                if(arr[i]>arr[i+1]){    //如果是降序只要将这里改为<号即可
                    int t=arr[i+1];
                    arr[i+1]=arr[i];
                    arr[i]=t;
                }
            }
            for(int i=0;i<arr.length;i++){
                System.out.print(arr[i]+"	");
            }
            System.out.println("选出本次最大值:"+arr[arr.length-j]);
        }
        System.out.println("排序后的数据:");
        for(int i=0;i<arr.length;i++){
            System.out.print(arr[i]+"	");
        }
        
    }
}

结果:

原始数据:
10    34    300    56    6    56    7    87    5    
排序(升序):
10    34    56    6    56    7    87    5    300    选出本次最大值:300
10    34    6    56    7    56    5    87    300    选出本次最大值:87
10    6    34    7    56    5    56    87    300    选出本次最大值:56
6    10    7    34    5    56    56    87    300    选出本次最大值:56
6    7    10    5    34    56    56    87    300    选出本次最大值:34
6    7    5    10    34    56    56    87    300    选出本次最大值:10
6    5    7    10    34    56    56    87    300    选出本次最大值:7
5    6    7    10    34    56    56    87    300    选出本次最大值:6
排序后的数据:
5    6    7    10    34    56    56    87    300    

 比较次数:36
  交换次数:20

原文地址:https://www.cnblogs.com/feiquan/p/8973300.html