要點
基本思想:就是把乙個新的元素插入已排好序的陣列形成乙個新的已排好序的陣列(比方說:有乙個陣列是 1,3,4,6,8 現在要將"2"插入到陣列中,那麼插入位置就是"1"和"3"之間,形成乙個新的有序陣列),就好像打撲克牌一樣,比如先拿一張5在手裡,再摸到一張4,比5小,插到5前面,
摸到一張7,嗯,比5大,插到5後面,
摸到一張8,比7大,插到7後面,就這樣。。。
實現思路:從第乙個元素開始,取下乙個元素比較後實現排序,形成新的陣列,再取第三個元素與該陣列比較,比較時從該陣列的最後一位開始比較,若新元素比與其比較的元素小,則將該比較的元素後移以為,直到新元素比該陣列左邊找到其應該插入的位置。
**往往會更好,我下邊這張圖很清楚,很容易看懂,順便說一下個人理解!
上邊圖中,通過直接插入排序,將無序數列變為從小到大有序數列!原先數列為:3,44,38,5,47,15,36,26,27,2,46,4,19,50,48
第一步:先將第乙個元素「3」看作是乙個有序數列
第二步:將原先被看作為有序數列的"3"的後一位元素抽出,與原先有序數
列進行比對(圖中先把"3"作為乙個有序數列,然後將後邊的"44"抽出,與其比較,原先有序數列中的元素如果比抽出的元素小,則不變,如果比抽出的元素大,則將原先數列中比較的元素向後移動,"3"比"44"小 不變)
第三步:依照第二步步驟,繼續向後移動,這時新的有序數列從原先的"3"變為了"3,44",繼續向後移動,將「38」抽出,與有序數列進行比較,從後向前,先與"44"比較,比抽出的元素大,所以向後移動位置,然後再與有序數列的中"3"進行比較,比抽出的數列小,不變,所以就將抽出的元素"38"歸位,放到已經向後移動過的元素"44"的位置。
第四步:接下來的過程就依照上述步驟,不停的向後移動,不停的將抽出的元素與新組成的有序數列進行比對,原先有序數列中的元素如果比抽出的元素小就不變,大就向後移動,直到排序完成結束!
**(c#版本)
class學習完成!(*^▽^*)program
;insertsort(arr);
for (int i = 0; i < arr.length; i++)
console.readkey();
}//////
直接插入排序
/// ///
需要排序的陣列
public
static
void insertsort(int
array)
else
break
; }}}
}
排序演算法 插入排序
插入排序 insertion sort 的演算法描述是一種簡單直觀的排序演算法。它的工作原理是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃瞄,找到相應位置並插入。插入排序在實現上,通常採用in place排序 即只需用到o 1 的額外空間的排序 因而在從後向前掃瞄過程中,需要反覆把已排...
排序演算法 插入排序
排序演算法之插入排序 參照新版程式 下面是錯誤的理解,正確的參考,後文已經修改過的部分。選擇排序,顧名思義,就是選擇乙個元素進行排序。原理 將原始序列分成兩部分,一部分已經有序,一部分無序。將無序中的元素逐個插入到有序序列中。這個也是兩層迴圈,就我個人理解,與氣泡排序是乙個原理。氣泡排序是每次都從無...
排序演算法 插入排序
插入排序簡單來說 就是將乙個資料插入到已經到排好的序列中,但要求插入後仍然有序。這種方法一般適用少量資料的。一 主要的插入排序 直接插入排序 二分插入排序 鍊錶插入排序,希爾排序,是屬於穩定排序的一種。二 直接插入排序 把n個待排序的元素看成為乙個有序表和乙個無序表,開始時有序表中只包含乙個元素,無...