定義一個資料類,主要是定義一些常用的方法,方便以後寫別的排序時和插入排序使用同樣的資料,比較下演算法的執行時間。
public class DataSource {public static int SIZE = 1001;public static int[] getIntArray(){int[] dataArray = new int[SIZE];for(int i = 1; i < SIZE; i++){dataArray[i] = SIZE - i;}return dataArray;}public static void logs(String pLog){System.out.println("longs = " + pLog);}}
定義一個插入排序的類,主要負責對給定的資料進行插入排序,同時列印排序前的數組、排序時間及排序後的數組。
public class SortByInsert {public static void main(String args[]) {SortByInsert mSortByInsert = new SortByInsert();mSortByInsert.sortByInsert();}public void sortByInsert() {int[] dataArray = DataSource.getIntArray();printArray("Begin", dataArray);long beginTime = System.currentTimeMillis();for (int i = 2; i < dataArray.length; i++) {moveAndInsertItem(dataArray, 1, i - 1, i);}long endTime = System.currentTimeMillis();long spendTime = endTime - beginTime;printString("spend_time(int Mills) = " + spendTime);printArray("End", dataArray);}public void moveAndInsertItem(int[] pDataArray, int pBegin, int pEnd,int pAboutInsert) {for (int i = pBegin; i <= pEnd; i++) {if (pDataArray[i] > pDataArray[pAboutInsert]) {int tmp = pDataArray[i];pDataArray[i] = pDataArray[pAboutInsert];pDataArray[pAboutInsert] = tmp;}}}public void printArray(String pTag, int[] pDataArray){for(int i = 0; i < pDataArray.length; i++){DataSource.logs(pTag + " i = " + i + " value = " + pDataArray[i]);}}public void printString(String pTag){DataSource.logs(pTag);}}
主要的思想是依次對(1,2),(1,2,3)---,(1,2,3,---,n)相進行從小到大排序,演算法的複雜度是n*n(1+2+3+---+n),有不合適的地方多多指教,謝拉~~
javaeye地址:http://junbianli.iteye.com/blog/1815573