最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(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)遵守國家法律
开江县| 隆安县| 开原市| 乃东县| 牙克石市| 揭阳市| 汝阳县| 永顺县| 泰和县| 徐汇区| 格尔木市| 江安县| 黑水县| 深州市| 三原县| 佛坪县| 黔西县| 普格县| 东莞市| 吉水县| 张家界市| 平陆县| 揭东县| 九寨沟县| 海南省| 眉山市| 江陵县| 彭阳县| 漯河市| 陇西县| 泉州市| 衢州市| 海口市| 陆河县| 白水县| 鄱阳县| 荔浦县| 高陵县| 金华市| 鹰潭市| 林州市|