1. 程式人生 > >三種排序方式

三種排序方式

冒泡,選擇,插入排序

public class Buble {

	public static void main(String[] args) {
		//建立一維陣列
				int[]arr={11,4,7,2,55,9};
				System.out.println("氣泡排序後資料為");
				bubble(arr);
				list(arr);
				System.out.println();
				int[]arr1={3,6,1,98,7,66,2};
				System.out.println("選擇排序後資料為");
				select(arr1);
				list(arr1);
				System.out.println();
				int[]arr2={11,32,1,3,76,8,56};
				System.out.println("插入排序後資料為");
				insert(arr2);
				list(arr2);

	}

	private static void insert(int[] arr2) {
		//外層控制輪
				for(int i=0;i<arr2.length-1;i++){
					//內層控制次數
					for(int j=i+1;j>0;j--){
						if(arr2[j]<arr2[j-1]){
							change(j,j-1,arr2);
						}else{
							break;
						}
					}
				}
		
	}

	private static void select(int[] arr1) {
		// 外層控制輪數
		for (int i = 0; i < arr1.length-1; i++) {
			//內層控制次數
			int t = i;
			for (int j = i+1; j < arr1.length; j++) {
				if(arr1[t]>arr1[j]){
					t = j;
				}
			}
				if(t!=i){
					change(t,i,arr1);
				
			}
		}
		
	}

	private static void list(int[] arr) {
		//遍歷陣列,輸出陣列
		for (int i : arr) {
			System.out.print(i+" ");
		}
		
	}

	private static void bubble(int[] 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]){
					//兩個數位置互換
					change(j,j+1,arr);
				}
				
			}
		}
		
	}

	private static void change(int i, int j, int[] arr) {
		// 交換兩個數的位置
		int temp = arr[i];
		arr[i] = arr[j];
		arr[j] = temp;	
	}

}

總結

氣泡排序的思路

冒泡就像魚吐得泡泡一樣,泡泡越來越大,連起來看就是小泡泡在下面,大泡泡在上面。聯想到數字就是大的數字在上面,小的數在下面。給你一個串數字,根據氣泡排序的方法演示就是這樣的 假如有這樣的數字11,4,7,2,55,9。 第一次比較 : 4,7,2,11,9,55 就是兩個數兩兩比較 第二次比較 : 4,2,7,9,11 由於最大的數已經出來就不用比較最後一個了 第三次比較 : 2,4,7,9 第四次比較 : 2,4,7 第五次比較 : 2,4 第六次比較 : 2 其實最後一次就沒進入迴圈,因為一共6個數,前五個大的數都找出來了,自然而然最小的數也出來了。

選擇排序

選擇排序,就是先拿出一個數,假設是最小的數,一個一個的跟後面的數進行比較。找到最小的數,由於是在陣列中操作的。所以我們只需記住這個數的下標,當比較完畢,看看這個下標跟之前假設最小值的下標是否相等,不相等,讓他們兩個數進行交換。

插入法排序

插入法排序,先讓兩個數進行排序,當第三個數進來時,只需要跟第二個數比較,當它大於最二個數是,直接插入這個數的後面。當它小於第二個數時,依次跟前兩個數比較。後面的數也是這樣跟前面的數進行比較。 總的來說,後面兩種方法都是根據氣泡排序方法延伸而來,主要是考慮到效率問題,後面的方法相對於冒泡來說依次少比較了很多次。