排序 時間倒序 排序演算法 插入排序

2021-10-16 03:04:15 字數 1220 閱讀 2613

你一定玩過紙牌,為了使手中的牌變的有序,我們正常人的思維是把摸到的牌插入到對應的位置,你就會得到有序的牌了。在計算機中要給給插入的元素騰空間,需要將其後的元素在插入之前後移一位,這種演算法叫插入排序;

1. 從第乙個元素開始,該元素認為已經排序;

2. 取下乙個元素,把該元素與已經排序的元素從右到左邊依次比較;

3. 如果從已經排序的元素中大於該元素,則排序中的元素右移一位;

4. 重複上述步驟3,直到找到已排序的元素小於該元素;

5. 將該元素插入到該位置後;

6. 重複上述2~5步;

def insertsort(nums):    for i in range(1, len(nums)):        temp = nums[i]        j = i - 1        while j >= 0 and temp < nums[j]:            nums[j + 1] = nums[j]            j -= 1        nums[j + 1] = temp    return nums
c++:
std::vectorinsert_sort(std::vectornums)         nums[j + 1] = temp;    }    return nums;}
時間複雜度分析:

最好情況:假設乙個有序陣列,在每次迴圈的只比較一次就完成排序,所以時間複雜度為o(n);

最壞的情況:假設乙個陣列是倒序的每次插入的元素都要插入到第乙個位置,此時時間複雜度為

平均情況:每個位點插入的概率相同:

空間複雜度分析:

沒有開闢額外的儲存空間,空間複雜度為

穩定性:

將元素插入到正確位置後,只有那些比待插入元素大的元素會位於待插入元素的右側,所以大小相同元素的順序在排序後不會被打亂。

思考:

我插入的時候可以把步長拉大點嗎?

倒序排序 詳解插入排序

插入排序 insertion sort 的過程就像我們排序撲克牌一樣 從左到右,從小到大 開始時我們左手為空,然後我們從桌子上拿起一張牌並將它插入到左手中正確的位置,為了找到這個位置,我們將這張牌與左手中從右向左的每張牌進行比較,直到找到比它小或相等的牌的後面。與排序撲克牌類似,插入排序的原理是將陣...

排序演算法 插入排序

插入排序 insertion sort 的演算法描述是一種簡單直觀的排序演算法。它的工作原理是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃瞄,找到相應位置並插入。插入排序在實現上,通常採用in place排序 即只需用到o 1 的額外空間的排序 因而在從後向前掃瞄過程中,需要反覆把已排...

排序演算法 插入排序

排序演算法之插入排序 參照新版程式 下面是錯誤的理解,正確的參考,後文已經修改過的部分。選擇排序,顧名思義,就是選擇乙個元素進行排序。原理 將原始序列分成兩部分,一部分已經有序,一部分無序。將無序中的元素逐個插入到有序序列中。這個也是兩層迴圈,就我個人理解,與氣泡排序是乙個原理。氣泡排序是每次都從無...