1. 程式人生 > >排序演算法之插入排序演算法【java實現】

排序演算法之插入排序演算法【java實現】

插入排序演算法通過對未排序的資料執行逐個插入至合適的位置而完成排序工作。思路簡單,應用較多。但是此演算法在資料無規律的情況下,需要移動大量的資料,效率不高。

步驟:

(1)首先對陣列的前兩個資料進行從小到大排序。

(2)接著將第3個數據與排好序的兩個資料進行比較,將第3個數據插入合適的位置。

(3)然後,將第4個數據插入已經排好序的前3個數據中。

(4)不斷重複上訴過程,直到把最後一個數據插入合適的位置。

通過一個簡單的例子來了解一下:

比如現在有一組混亂的資料:5  3  4  9  2

一次排序: 

3  5  4  9  2

二次排序:  4  5  9  2

三次排序:  3  4  5  9  2

四次排序:  2  3  4  5  9

下面給出實現程式碼:

package zhgyu.sort;
/**
 * 插入排序演算法
 * @author zhgyu
 *
 */
public class InsertionSort {

	static final int SIZE = 10;
	static void insertionSort(int[] arr) {
		
		//儲存短暫數
		int temp;
		int i,j;
		for(i = 1; i < arr.length; i++) {
			temp = arr[i];
			j = i -1;
			
			//插入資料
			while(j >= 0 && temp < arr[j]) {
				arr[j+1] = arr[j];
				j--;
			}
			arr[j+1] = temp;
			
			System.out.print("第"+ i +"步的排序結果:");
			for(int k = 0; k < arr.length; k++) {
				System.out.print(arr[k] + "\t");
			}
			System.out.println();
		}
	}
	
	
	public static void main(String[] args) {
		int[] arr = new int[SIZE];
		int i;
		
		for(i = 0; i < SIZE; i ++) {
			arr[i] = (int)(Math.random()*(100 + 1));
		}
		//排序前的陣列
		System.out.print("排序前的陣列:");
		for(i = 0; i < arr.length; i++) {
			System.out.print(arr[i] + "\t");
		}
		System.out.println();
		
		//呼叫插入排序演算法
		insertionSort(arr);
		
		//排序後的陣列
		System.out.print("排序後的陣列:");
		for(i = 0; i < arr.length; i++) {
			System.out.print(arr[i] + "\t");
		}
		System.out.println();

	}
}