W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
「插入排序 insertion sort」是一種簡單的排序算法,它的工作原理與手動整理一副牌的過程非常相似。
具體來說,我們在未排序區(qū)間選擇一個基準元素,將該元素與其左側(cè)已排序區(qū)間的元素逐一比較大小,并將該元素插入到正確的位置。
圖 11-6 展示了數(shù)組插入元素的操作流程。設基準元素為 base ,我們需要將從目標索引到 base 之間的所有元素向右移動一位,然后再將 base 賦值給目標索引。
圖 11-6 單次插入操作
插入排序的整體流程如圖 11-7 所示。
圖 11-7 插入排序流程
insertion_sort.cpp
/* 插入排序 */
void insertionSort(vector<int> &nums) {
// 外循環(huán):已排序元素數(shù)量為 1, 2, ..., n
for (int i = 1; i < nums.size(); i++) {
int base = nums[i], j = i - 1;
// 內(nèi)循環(huán):將 base 插入到已排序部分的正確位置
while (j >= 0 && nums[j] > base) {
nums[j + 1] = nums[j]; // 將 nums[j] 向右移動一位
j--;
}
nums[j + 1] = base; // 將 base 賦值到正確位置
}
}
插入排序的時間復雜度為
這個結(jié)論與線性查找和二分查找的適用情況的結(jié)論類似。快速排序這類
實際上,許多編程語言(例如 Java)的內(nèi)置排序函數(shù)都采用了插入排序,大致思路為:對于長數(shù)組,采用基于分治的排序算法,例如快速排序;對于短數(shù)組,直接使用插入排序。
雖然冒泡排序、選擇排序和插入排序的時間復雜度都為 O(n2) ,但在實際情況中,插入排序的使用頻率顯著高于冒泡排序和選擇排序,主要有以下原因。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: