Java---詳細解析數組中冒泡排序、選擇排序、插入排序的運算過程及運用。

冒泡排序法

特點
   1. 相鄰兩個數進行比較, 大的數往後面冒泡,每一趟比較完畢,最大的數出現在了最後面

    2. 一共比較了 arr.length - 1 趟

    3. 每一趟比上一趟少比較一次

代碼

public class BubbleSortDemo {
	public static void main(String[] args) {
		int[] arr = {24, 69, 80, 55, 13};
		System.out.println("排序前: " + Arrays.toString(arr));
		
		// 第一趟排序
		/*
		 * arr[0] 和 arr[1]
		 * arr[1] 和 arr[2]
		 * arr[2] 和 arr[3]
		 * arr[3] 和 arr[4]
		 * 
		 * arr[i] 和 arr[i+1]
		 * 
		 * 重複的次數4
		 */
		/*for (int i = 0; i < arr.length - 1 - 0; i++) {
			if (arr[i] > arr[i+1]) {
				int temp = 0;
				temp = arr[i];
				arr[i] = arr[i+1];
				arr[i+1] = temp;
			}
		}
		System.out.println("第一趟排序後: " + Arrays.toString(arr));
		
		// 第二趟排序
		
		 * arr[0] 和 arr[1]
		 * arr[1] 和 arr[2]
		 * arr[2] 和 arr[3]
		 * 
		 * arr[i] 和 arr[i+1]
		 * 重複的次數3
		 
		for (int i = 0; i < arr.length - 1 - 1; i++) {
			if (arr[i] > arr[i+1]) {
				int temp = 0;
				temp = arr[i];
				arr[i] = arr[i+1];
				arr[i+1] = temp;
			}
		}
		System.out.println("第二趟排序後: " + Arrays.toString(arr));
		
		// 第三趟排序
		
		 * arr[0] 和 arr[1]
		 * arr[1] 和 arr[2]
		 * 
		 * arr[i] 和 arr[i+1]
		 * 重複的次數3
		 
		for (int i = 0; i < arr.length - 1 - 2; i++) {
			if (arr[i] > arr[i+1]) {
				int temp = 0;
				temp = arr[i];
				arr[i] = arr[i+1];
				arr[i+1] = temp;
			}
		}
		System.out.println("第三趟排序後: " + Arrays.toString(arr));
		
		// 第四趟排序
		
		 * arr[0] 和 arr[1]
		 * 
		 * arr[i] 和 arr[i+1]
		 * 重複的次數3
		 
		for (int i = 0; i < arr.length - 1 - 3; i++) {
			if (arr[i] > arr[i+1]) {
				int temp = 0;
				temp = arr[i];
				arr[i] = arr[i+1];
				arr[i+1] = temp;
			}
		}
		System.out.println("第四趟排序後: " + Arrays.toString(arr));*/

		//通過以上代碼發現的規律,將代碼進行優化的冒泡排序法
		for (int i = 0; i < arr.length - 1; i++) {
			for (int j = 0; j < arr.length - 1 - i; j++) {
				if (arr[j] > arr[j+1]) {
					int temp = 0;
					temp = arr[j];
					arr[j] = arr[j+1];
					arr[j+1] = temp;
				}
			}
		}
		System.out.println("冒泡排序後: " + Arrays.toString(arr));
	}
}

選擇排序

特點
    1.選擇排序是每個元素依次和後面所有元素進行比較,第一趟排序後,最小的數就出現在做前面

    2.一共比較了 arr.length - 1趟

    3.每一趟比上一趟少比較1次

    4.每一趟比較的數的起始位置是上一趟的起始位置 + 1
代碼

public class SelectSortDemo {
	public static void main(String[] args) {
		int[] arr = {44, 89, 100, 77, 33};
		System.out.println("選擇排序前: " + Arrays.toString(arr));
		
		// 第一趟排序
		/*
		 * arr[0] 和 arr[1]
		 * arr[0] 和 arr[2]
		 * arr[0] 和 arr[3]
		 * arr[0] 和 arr[4]
		 * 
		 * 一共比較了 arr.length - 1 次
		 */
		/*int i = 0; // 5 1 ~ 5 1234
		for (int j = i + 1; j < arr.length; j++) {
			if (arr[i] > arr[j]) {
				int temp = 0;
				temp = arr[i];
				arr[i] = arr[j];
				arr[j] = temp;
			}
		}
		System.out.println("第一趟排序後: " + Arrays.toString(arr));
		
		i = 1; // 5 2 ~ 5 234
		for (int j = i + 1; j < arr.length; j++) {
			if (arr[i] > arr[j]) {
				int temp = 0;
				temp = arr[i];
				arr[i] = arr[j];
				arr[j] = temp;
			}
		}
		System.out.println("第二趟排序後: " + Arrays.toString(arr));
		
		i = 2; // 5 2 ~ 5 234
		for (int j = i + 1; j < arr.length; j++) {
			if (arr[i] > arr[j]) {
				int temp = 0;
				temp = arr[i];
				arr[i] = arr[j];
				arr[j] = temp;
			}
		}
		System.out.println("第三趟排序後: " + Arrays.toString(arr));
		
		i = 3; // 5 2 ~ 5 234
		for (int j = i + 1; j < arr.length; j++) {
			if (arr[i] > arr[j]) {
				int temp = 0;
				temp = arr[i];
				arr[i] = arr[j];
				arr[j] = temp;
			}
		}
		System.out.println("第四趟排序後: " + Arrays.toString(arr));*/
		
		//	//通過以上代碼發現的規律,將代碼進行優化的選擇排序法
		for (int i = 0; i < arr.length - 1; i++) {
			for (int j = i + 1; j < arr.length; j++) {
				if (arr[i] > arr[j]) {
					int temp = 0;
					temp = arr[i];
					arr[i] = arr[j];
					arr[j] = temp;
				}
			}
		}
		
		System.out.println("選擇排序後: " + Arrays.toString(arr));
	}
}

插入排序法

特點
    (Insertion Sort)是一種簡單直觀的排序算法。

    它的工作原理是通過構建有序序列,對於未排序數據,在已排序序列中從後向前掃描,

    找到相應位置並插入。插入排序在實現上,在從後向前掃描過程中,

    需要反覆把已排序元素逐步向後挪位,爲最新元素提供插入空間。

        1.從第一個元素開始,該元素可以認爲已經被排序

        2.取出下一個元素,在已經排序的元素序列中從後向前掃描

        3.如果該元素(已排序)大於新元素,將該元素移到下一位置

        4.重複步驟3,直到找到已排序的元素小於或者等於新元素的位置

        5.將新元素插入到該位置後

        6.重複步驟2~5
代碼

public class InsertSortDemo {
	public static void main(String[] args) {
		int[] arr = {69, 24, 15, 31, 13};
		
		System.out.println("排序前: " + Arrays.toString(arr));
		/*
		 * 第一趟排序
		 * arr[1] 和 arr[0] 進行比較
		 * 比較一次
		 */
		/*int i = 1;
		for (int j = 0; j < 1; j++) {
			if (arr[i] < arr[j]) {
				int temp = 0;
				temp = arr[i];
				arr[i] = arr[j];
				arr[j] = temp;
			}
		}
		System.out.println("第一趟排序後: " + Arrays.toString(arr));
		
		
		 * 第二趟排序
		 * arr[2] 和 arr[0] 進行比較
		 * arr[2] 和 arr[1] 進行比較
		 * 比較2次
		 
		i = 2;
		for (int j = 0; j < 2; j++) {
			if (arr[i] < arr[j]) {
				int temp = 0;
				temp = arr[i];
				arr[i] = arr[j];
				arr[j] = temp;
			}
		}
		System.out.println("第二趟排序後: " + Arrays.toString(arr));
		
		
		 * 第二趟排序
		 * arr[3] 和 arr[0] 進行比較
		 * arr[3] 和 arr[1] 進行比較
		 * arr[3] 和 arr[2] 進行比較
		 * 比較3次
		 
		i = 3;
		for (int j = 0; j < 3; j++) {
			if (arr[i] < arr[j]) {
				int temp = 0;
				temp = arr[i];
				arr[i] = arr[j];
				arr[j] = temp;
			}
		}
		System.out.println("第三趟排序後: " + Arrays.toString(arr));
		
		
		 * 第四趟排序
		 * arr[4] 和 arr[0] 進行比較
		 * arr[4] 和 arr[1] 進行比較
		 * arr[4] 和 arr[2] 進行比較
		 * arr[4] 和 arr[3] 進行比較
		 * 比較4次
		 
		i = 4;
		for (int j = 0; j < 4; j++) {
			if (arr[i] < arr[j]) {
				int temp = 0;
				temp = arr[i];
				arr[i] = arr[j];
				arr[j] = temp;
			}
		}
		System.out.println("第四趟排序後: " + Arrays.toString(arr));*/
		
		//通過以上代碼發現的規律,將代碼進行優化的插入排序法
		for (int i = 1; i < arr.length ; i++) {
			for (int j = 0; j < i; j++) {
				if (arr[i] < arr[j]) {
					int temp = 0;
					temp = arr[i];
					arr[i] = arr[j];
					arr[j] = temp;
				}
			}
		}
		System.out.println("排序後: " + Arrays.toString(arr));
	}
}

發佈了28 篇原創文章 · 獲贊 47 · 訪問量 4076
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章