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");
		}
	
	}

在這里插入圖片描述


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM