五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

十大排序(C++)-- 插入排序(InsertSort)

2023-06-05 09:13 作者:XPenguin鵝  | 我要投稿

????????前兩種算法原理和實(shí)現(xiàn)都相對(duì)簡單,而到了插入排序開始,就會(huì)有一點(diǎn)小小的繞。(我當(dāng)初也暈了(|3」∠))插入排序的原理不難,每次選擇一個(gè)數(shù)插入到前面他應(yīng)該在的位置上。原理很簡單hhh但是實(shí)現(xiàn)有點(diǎn)小繞。我們同樣的一組測試用例:[5,3,8,6,9,2,1,4,7],利用Excel表格能更好的看到效果。

初始位置

我們舉個(gè)栗子,在第一遍遍歷時(shí)的設(shè)置初始下標(biāo)i=1,j=i-1,nums[i]此時(shí)值為3,j=0,那么此時(shí)nums[j]的值比nums[i]大,因此,nums[i]應(yīng)該插入到nums[j]的前面!說明有序時(shí)nums[i]的位置應(yīng)該在更前面,所以我們先把nums[i]記錄下來,把j往后面挪,令nums[j+1]=nums[j],而j繼續(xù)向前,直到遍歷到開頭或者遇到nums[i]比nums[j]大的時(shí)候,這時(shí)的位置就是nums[i]該插入的位置了。

用一個(gè)temp記錄nums[i],同時(shí)nums[j+1]=nums[j]給nums[i]騰位置
在j遇到nums[i]>nums[j]時(shí)或j<0時(shí)結(jié)束遍歷,nums[j+1]=temp

我們來看一下實(shí)現(xiàn)的代碼:

打印一下每遍運(yùn)行的結(jié)果看一下。

插入排序運(yùn)行結(jié)果

由每次的循環(huán)我們可以看到,每一次遍歷都會(huì)多出一個(gè)數(shù)插入到前面他應(yīng)到的位置上。

時(shí)間復(fù)雜度:O(n^2),空間復(fù)雜度:O(1)

優(yōu)點(diǎn):在最好的情況下時(shí)間復(fù)雜度為O(n),與冒泡排序一樣。但是在處理大量數(shù)據(jù)時(shí),還記不記得我們是怎么處理冒泡排序中的值的?沒錯(cuò),交換!而一次交換需要耗費(fèi)3條語句,插入排序只需要一次賦值即可。因此在同樣的情況下,插入排序的處理時(shí)間會(huì)優(yōu)于冒泡排序。
缺點(diǎn):同樣的,在最差的條件下(比如我們要求正序但用例是完全倒序),時(shí)間復(fù)雜度為O(n^2)。

十大排序(C++)-- 插入排序(InsertSort)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
建始县| 连云港市| 尉氏县| 成安县| 乌鲁木齐县| 剑川县| 沭阳县| 来安县| 云龙县| 水富县| 武定县| 永善县| 九龙坡区| 内黄县| 杭锦后旗| 报价| 托克托县| 阜南县| 精河县| 玛沁县| 石楼县| 五河县| 庆元县| 双峰县| 大足县| 庐江县| 潍坊市| 灵石县| 沈阳市| 咸丰县| 公主岭市| 宣城市| 绍兴市| 龙岩市| 凤庆县| 三亚市| 河北省| 宝清县| 衡阳县| 水富县| 施秉县|