无码av一区二区三区无码,在线观看老湿视频福利,日韩经典三级片,成 人色 网 站 欧美大片在线观看

歡迎光臨散文網(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)遵守國家法律
招远市| 漯河市| 高清| 新平| 中山市| 嘉善县| 城口县| 富源县| 鹿泉市| 开化县| 襄城县| 孙吴县| 南乐县| 中牟县| 平邑县| 南靖县| 宁国市| 惠安县| 福鼎市| 浦东新区| 邹城市| 炎陵县| 休宁县| 高邮市| 瑞安市| 原平市| 交城县| 抚宁县| 叙永县| 漳平市| 乐至县| 盱眙县| 东丽区| 仁寿县| 宁波市| 中卫市| 茌平县| 临洮县| 宿松县| 伊吾县| 寻乌县|