1. 程式人生 > >Java基礎練習03--直接插入排序

Java基礎練習03--直接插入排序

       直接插入排序是一種簡單的排序方法,它的基本操作是將一個紀錄插入到已經排好的記錄中,從而得到一個新的、記錄數增1的有序表。

程式碼:

import java.util.Arrays;

/**
 * 使用陣列進行演示:
 * 首先我們將陣列的第一個元素作為"有序表",其餘的元素作為 "無序表"
 * 排序方法:
 * 	1.將 arr[1] 加入到 "有序表"中,和arr[0] 比較,若arr[1]>arr[0] 則交換位置
 * 	2.將 arr[2] 加入到 "有序表"中,和arr[1]進行比較,若arr[2]>arr[1] 則交換位置
 * 	     然後將arr[1]和arr[0] 比較,若arr[1]>arr[0] 交換位置 以此類推
 *      3.重複進行比較和交換直到陣列中的元素都是有序的
 * @author drc
 *
 */
public class StraightInsertSortDemo {
    public static void main(String[] args) {
	// 測試
	int[] arr = {7, 3, 9, 2, 11, 44, 6, 1, 77};
	straightInsertSort(arr);
	System.out.println(Arrays.toString(arr));
    }
    /**
     * 直接插入排序
     * @param arr
     * @return
    */
    static int[] straightInsertSort(int[] arr) {
	int order = 1; // 初始有序序列長度為1
	while (order<arr.length) { // 當整個陣列變成有序的時候退出迴圈
	    for (int x=order-1; x>=0; x--) { // 從有序序列的最後一個元素開始比較
		if (arr[x] > arr[x+1]) {
		    arr[x] = arr[x]+arr[x+1];
		    arr[x+1] = arr[x]-arr[x+1];
		    arr[x] = arr[x]-arr[x+1];
		} else {
                    order++; // 每插入一個元素,有序表的長度增1
                    break; // 元素插入後即可跳出for迴圈
                }
	    }
	}
        return arr;
    }
}