zoukankan      html  css  js  c++  java
  • Java之冒泡排序

    排序的介绍

    • 排序是将多个数据,依指定的顺序进行排列的过程。

    1. 排序的分类:

    1. 内部排序:
      指将需要处理的所有数据都加载到内部存储器中进行排序。包括(交换式排序法、选择
      式排序法和插入式排序法);
    2. 外部排序法:
      数据量过大,无法全部加载到内存中,需要借助外部存储进行排序。包括(合并排序法和直接合并排序法)。

    2. 冒泡排序法

    • 冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从后向前(从下标较大的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就像水底下的气泡一样逐渐向上冒。
      在这里插入图片描述

    3. 冒泡排序法案例:

    BubbleSort.java

    • 下面我们举一个具体的案例来说明冒泡法。我们将五个无序:24,69,80,57,13 使用冒泡排序法将其排成一个从小到大的有序数列。
    • 图像分析:
      在这里插入图片描述

    思路:

    • 化繁为简,先死后活
    	数组 [24,69,80,57,13]1轮排序: 目标把最大数放在最后
    	第1次比较[24,69,80,57,13]2次比较[24,69,80,57,13]3次比较[24,69,57,80,13]4次比较[24,69,57,13,80]
    
    	int[] arr = {24, 69, 80, 57, 13};
    	int temp = 0; //用于辅助交换的变量
    
    	for( int j = 0; j < 4; j++) {//4次比较
          	//如果前面的数>后面的数,就交换
          	if(arr[j] > arr[j + 1]) {
          		temp = arr[j];
          		arr[j] = arr[j+1];
          		arr[j+1] = temp;  
          	}
          }
    
          System.out.println("==第1轮==");
          for(int j = 0; j < arr.length; j++) {
          	System.out.print(arr[j] + "\t");
          }
          /*
          第2轮排序: 目标把第二大数放在倒数第二位置
          第1次比较[24,69,57,13,80]
          第2次比较[24,57,69,13,80]
          第3次比较[24,57,13,69,80]
           */
    
          for( int j = 0; j < 3; j++) {//3次比较
          	//如果前面的数>后面的数,就交换
          	if(arr[j] > arr[j + 1]) {
          		temp = arr[j];
          		arr[j] = arr[j+1];
          		arr[j+1] = temp;  
          	}
          }
    
          System.out.println("\n==第2轮==");
          for(int j = 0; j < arr.length; j++) {
          	System.out.print(arr[j] + "\t");
          }
    
    
          //第3轮排序: 目标把第3大数放在倒数第3位置
          //第1次比较[24,57,13,69,80]
          //第2次比较[24,13,57,69,80]
    
    
          for( int j = 0; j < 2; j++) {//2次比较
          	//如果前面的数>后面的数,就交换
          	if(arr[j] > arr[j + 1]) {
          		temp = arr[j];
          		arr[j] = arr[j+1];
          		arr[j+1] = temp;  
          	}
          }
    
          System.out.println("\n==第3轮==");
          for(int j = 0; j < arr.length; j++) {
          	System.out.print(arr[j] + "\t");
          }
    
          /*
          第4轮排序: 目标把第4大数放在倒数第4位置
          第1次比较[13,24,57,69,80]
           */
    
          for( int j = 0; j < 1; j++) {//1次比较
          	//如果前面的数>后面的数,就交换
          	if(arr[j] > arr[j + 1]) {
          		temp = arr[j];
          		arr[j] = arr[j+1];
          		arr[j+1] = temp;  
          	}
          }
    
          System.out.println("\n==第4轮==");
          for(int j = 0; j < arr.length; j++) {
          	System.out.print(arr[j] + "\t");
          }
    

    在这里插入图片描述

    • 将多轮排序使用外层循环包括起来即可
      先死后活 => 4就是 arr.length - 1
    	int[] arr = {24, 69, 80, 57, 13};
    		int temp = 0; //用于辅助交换的变量
    
    		//将多轮排序使用外层循环包括起来即可
    		//先死后活 =》 4就是 arr.length - 1
    	for( int i = 0; i < arr.length - 1; i++) {//外层循环是4次
    	
    		for( int j = 0; j < arr.length - 1 - i; j++) {//4次比较-3次-2次-1次
    			//如果前面的数>后面的数,就交换
    			if(arr[j] > arr[j + 1]) {
    				temp = arr[j];
    				arr[j] = arr[j+1];
    				arr[j+1] = temp;  
    			}
    		}
    		System.out.println("\n==第"+(i+1)+"轮==");
    		for(int j = 0; j < arr.length; j++) {
    			System.out.print(arr[j] + "\t");
    		}
    	
    	}
    

    在这里插入图片描述

  • 相关阅读:
    HDU 5818 Joint Stacks (优先队列)
    POJ 3169 Layout (差分约束系统)
    HDU 4370 0 or 1 (最短路+最小环)
    LightOJ 1074 Extended Traffic (最短路spfa+标记负环点)
    HDU 1142 A Walk Through the Forest (求最短路条数)
    力扣71——简化路径
    力扣73——矩阵置零
    ThreadLocal的进化——TransmittableThreadLocal
    ThreadLocal的进化——InheritableThreadLocal
    Java——内部类详解
  • 原文地址:https://www.cnblogs.com/xdr630/p/15254642.html
Copyright © 2011-2022 走看看