国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(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)遵守國家法律
灌阳县| 达孜县| 玛沁县| 潮安县| 沁阳市| 长沙市| 沂水县| 安泽县| 阿拉善盟| 互助| 阳新县| 闽侯县| 拉萨市| 蚌埠市| 远安县| 册亨县| 苗栗市| 寿阳县| 英山县| 江津市| 海丰县| 望城县| 青岛市| 武冈市| 图片| 岳普湖县| 太康县| 凌海市| 襄汾县| 什邡市| 体育| 兴安县| 石嘴山市| 云阳县| 浙江省| 新竹市| 鄂伦春自治旗| 潮安县| 道孚县| 隆子县| 镇原县|