插入式排序屬於內部排序法,是對於欲排序的元素以插入的方式找尋該元素的適當位置,以達到排序的目的。
插入排序(insertion sorting)的基本思想是:把 把 n 個待排序的元素看成為乙個有序表和乙個無序表,開始時 有序表中只包含乙個元素,無序表中包含有n-1 個元素,排序過程中每次從無序表中取出第乙個元素,把它的排
序碼依次與有序表元素的排序碼進行比較,將它插入到有序表中的適當位置,使之成為新的有序表。
有一群小牛, 考試成績分別是 101, 34, 119, 1 請從小到大排序注: main方法裡注釋掉的**是用來測試該演算法所用時間的public
class
insertsort
;//測試一下插入排序的速度 o(n*2),給 80000個資料, 測試
// int arrtest = new int[80000];
// for (int i = 0; i < arrtest.length; i++)
// date date1 = new date();
// ******dateformat ******dateformat = new ******dateformat("yyyy-mm--dd hh:mm:ss");
// string date1str = ******dateformat.format(date1);
// system.out.println("排序前的時間是="+date1str);
system.out.
println
("排序前");
system.out.
println
(arrays.
tostring
(arr));
insertsort
(arr)
;//insertsort(arrtest);
system.out.
println
("排序後");
system.out.
println
(arrays.
tostring
(arr));
// date date2 = new date();
// ******dateformat ******dateformat2 = new ******dateformat("yyyy-mm--dd hh:mm:ss");
// string date2str = ******dateformat2.format(date2);
// system.out.println("排序後的時間是="+date2str);
}public
static
void
insertsort
(int
arr)
//當退出 while 迴圈時,說明插入的位置找到, insertindex
//這裡我們判斷是否需要賦值, 因為可能 insertindex 後就是當前位置
if(insertindex != i)
"第%d輪插入\n",(i+1));
}//使用逐步推導的方式來講解,便利理解
// //第 1 輪 ; =>
// //; =>
//// //定義待插入的數
// int insertval = arr[1];
// int insertindex = 1 - 1; //即 arr[1]的前面這個數的下標
//// //給 insertval 找到插入的位置
// //說明
// //1. insertindex >= 0 保證在給 insertval 找插入位置,不越界
// //2. insertval < arr[insertindex] 待插入的數,還沒有找到插入位置
// //3. 就需要將 arr[insertindex] 後移
// while (insertindex >= 0 && insertval < arr[insertindex])
//// //當退出 while 迴圈時,說明插入的位置找到, insertindex +1
// arr[insertindex + 1] = insertval;
//// system.out.println("第一輪插入");
// system.out.println(arrays.tostring(arr));
//// //第二輪
// //定義待插入的數
// insertval = arr[2];
// insertindex = 2 - 1; //即 arr[1]的前面這個數的下標
////
// while (insertindex >= 0 && insertval < arr[insertindex])
//// //當退出 while 迴圈時,說明插入的位置找到, insertindex +1
// arr[insertindex + 1] = insertval;
//// system.out.println("第二輪插入");
// system.out.println(arrays.tostring(arr));
//// //第三輪插入
// //定義待插入的數
// insertval = arr[3];
// insertindex = 3 - 1; //即 arr[1]的前面這個數的下標
////
// while (insertindex >= 0 && insertval < arr[insertindex])
//// //當退出 while 迴圈時,說明插入的位置找到, insertindex +1
// arr[insertindex + 1] = insertval;
//// system.out.println("第三輪插入");
// system.out.println(arrays.tostring(arr));
}}
執行結果排序前[101, 34, 119, 1, -1, 89]
排序後[-1, 1, 34, 89, 101, 119]
插入排序 折半插入排序
折半插入排序 binary insertion sort 直接插入排序採用順序查詢法查詢當前記錄在已排好序的序列中插入位置,這個 查詢 操作可利用 折半查詢 來實 現,由此進行的插入排序稱之為折半插入排序 binary insertion sort 演算法思想 1 將待排序的記錄存放在陣列r 1.n...
插入排序 折半插入排序
折半插入排序是基於直接插入排序的優化。直接插入排序 將第i個元素插入時,通過折半查詢的方式,來查詢第i個元素合適的位置。當0 i 1 位置上的元素都已經排序ok,現需要插入第i個元素,設其值為temp 令low 0,high i,mid high low 2。那麼temp可能插入的位置是 low h...
插入排序 希爾插入排序
本文借鑑於lsgo實驗室創始人馬老師 演算法 希爾插入排序 delta len nums 2 while delta 0 shell delta,nums delta delta 2return nums defshell delta,key for i in range delta,len key...