一趟直接插入排序:在有序區中插入r[i]的過程。
//直接插入排序
2void insertsort(int *arr, intn)3
16 arr[j + 1] = temp; //
在條件不滿足之前j--了一次,在j+1處放入temp17}
直接插入排序,當有序區元素太多時,在有序區中尋找插入位置可能比較的次數太多,採用折半插入法,即折半查詢到要插入的位置,加快了查詢效率,但是要移動的元素仍然和直接插入排序的相同,僅僅提公升了查詢效率。
//折半插入排序
2void bininsertsort(int *arr, intn)3
//找到位置high
2324
for (j = i - 1; j >= high + 1; j--) //
將比temp大的元素統一向後移動
2528 arr[high + 1] = temp; //
在high+1處放入temp29}
30}31 }
折半插入排序:在r[0..i-1]中查詢插入r[i]的位置,折半查詢的平均關鍵字比較次數為log2(i+1)-1,平均移動元素的次數為i/2+2,所以平均時間複雜度為:
折半插入排序採用折半查詢,查詢效率提高。但元素移動次數不變,僅僅將分散移動改為集合移動。
排序演算法 插入排序
插入排序 insertion sort 的演算法描述是一種簡單直觀的排序演算法。它的工作原理是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃瞄,找到相應位置並插入。插入排序在實現上,通常採用in place排序 即只需用到o 1 的額外空間的排序 因而在從後向前掃瞄過程中,需要反覆把已排...
排序演算法 插入排序
排序演算法之插入排序 參照新版程式 下面是錯誤的理解,正確的參考,後文已經修改過的部分。選擇排序,顧名思義,就是選擇乙個元素進行排序。原理 將原始序列分成兩部分,一部分已經有序,一部分無序。將無序中的元素逐個插入到有序序列中。這個也是兩層迴圈,就我個人理解,與氣泡排序是乙個原理。氣泡排序是每次都從無...
排序演算法 插入排序
插入排序簡單來說 就是將乙個資料插入到已經到排好的序列中,但要求插入後仍然有序。這種方法一般適用少量資料的。一 主要的插入排序 直接插入排序 二分插入排序 鍊錶插入排序,希爾排序,是屬於穩定排序的一種。二 直接插入排序 把n個待排序的元素看成為乙個有序表和乙個無序表,開始時有序表中只包含乙個元素,無...