冒泡排序由浅入深详细分析图解

原理分析

排序结果:
冒泡排序由浅入深详细分析图解_第1张图片

详细代码实现:
package july.star.bubble;
 /**
  * 冒泡排序
  *  相邻元素两两比较,大的往后放,第一次完毕后,最大值就出现在
  * 最大索引处,同理,继续,即可得到一个排序好的数组
  *
  * 规律:
  *  1、两两比较,大的往后放。
  *  2、第一次比较完毕后,下一次比较的时候就会减少一个元素的比较
  *  3、第一次比较,有0个元素不比
  *        第二次比较,有1个元素不比    
  *        第三次比较,有2个元素不比    
  *        第四次比较,有3个元素不比    
  *    .....
  *  4、总共需要比较数组的长度-1次
  * @author MoXingJian
  * @email [email protected]
  * @date 2016年12月24日 下午3:44:30
  * @version 1.0
  */
public class BubbleSort {
     public static void main(String[] args) {
          int[] arr = {21,69,90,55,12};
          //输出数组
          printArr(arr);
          //详细排序过程
          detailSort(arr);
          int[] arr2 = {23,59,34,88,2,99,68};
          //最终版
          endSort(arr2);
     }
     
     
     private static void endSort(int[] arr2) {
          System.out.println();
          System.out.println("原序列");
          printArr(arr2);
          //两次for循环解决
          for(int i = 0; i < arr2.length-1; i++){
              for(int j=0; j < arr2.length-1-i;j++){
                   if(arr2[j] > arr2[j+1]){
                        int temp = arr2[j];
                        arr2[j] = arr2[j+1];
                        arr2[j+1] = temp;
                   }
              }
          }
          System.out.println();
          System.out.println("两层循环排序");
          printArr(arr2);
     }
     private static void detailSort(int[] arr) {
          System.out.println();
          System.out.println("第一次排序:");
          //第一次排序
          //arr.length-1 为了防止数据越界
          //arr.length-1-0:为了减少比较的次数
          for(int i=0; i < arr.length-1-0; i++){
              if(arr[i] > arr[i+1]){
                   int temp = arr[i];
                   arr[i] = arr[i+1];
                   arr[i+1] = temp;
              }
          }
          printArr(arr);
          
          System.out.println();
          System.out.println("第二次排序:");
          //第二次排序
          for(int i=0; i < arr.length-1-1; i++){
              if(arr[i] > arr[i+1]){
                   int temp = arr[i];
                   arr[i] = arr[i+1];
                   arr[i+1] = temp;
              }
          }
          printArr(arr);
          
          System.out.println();
          System.out.println("第三次排序:");
          //第三次排序
          for(int i=0; i < arr.length-1-2; i++){
              if(arr[i] > arr[i+1]){
                   int temp = arr[i];
                   arr[i] = arr[i+1];
                   arr[i+1] = temp;
              }
          }
          printArr(arr);
          
          System.out.println();
          System.out.println("第四次排序:");
          //第四次排序
          for(int i=0; i < arr.length-1-3; i++){
              if(arr[i] > arr[i+1]){
                   int temp = arr[i];
                   arr[i] = arr[i+1];
                   arr[i+1] = temp;
              }
          }
          printArr(arr);
          
     }
     //输出数组
     private static void printArr(int[] arr) {
          System.out.print("[");
          for(int j = 0; j < arr.length; j++){
              if(j != arr.length-1){
                   System.out.print(arr[j] + ",");
              }else{
                   System.out.print(arr[j]);
              }
          }
          System.out.print("]");
     }
}


你可能感兴趣的:(排序算法)