首先補充一下滿足嚴格弱序的3個條件:
1.兩個關鍵字不能同時嚴格弱序於對方。
2.如果a嚴格弱序於b,且b嚴格弱序於c,則a必須嚴格弱序於c。
3.如果存在兩個關鍵字,任何乙個都不嚴格弱序於另乙個,則這兩個關鍵字是相等的。
sort採用的排序演算法是introsort,是一種混合型演算法。簡單來說就是利用快排將要排序的陣列分隔成大致有序的幾段, 根據遞迴深度和分隔開的小段長度情況看是否採取堆排序,最後再進行插入排序。這樣的話能在最壞情況下將時間複雜度推進到o(nlogn)。在sgistl實現的插入排序是這麼寫的:
1void
__unguarded_linear_insert(randomaccessiterator last, t value)
211 *last =value;
12 }
將注意力放在第5行的while迴圈上,你會發現這裡並沒有判斷邊界,原因是stl以嚴格弱序為前提且在進入這個函式前會保證有哨兵在陣列的前方。(這裡**是直接使用的小於,使用自定義comp的時候將while裡的《判斷換成comp理解就可以了。)
那麼如果我們元素不嚴格弱序的話,在全是相等元素的情況下,這個while會無限迴圈下去,最終造成陣列越界!
其實不止在插入排序這塊,在快速排序進行分割的時候也會出現類似的問題,這裡就不再多說了。
為什麼要人造元素 設計中為什麼要把各種元素對齊放置
常用word辦公的朋友應該都不會陌生。左對齊 居中對齊 右對齊 居中對齊 都是相當常見的對齊方式,這有啥可聊的。咱們先不說文字排版上的對齊方式,先看看生活中它們常常出現在 超市擺放商品的貨架 呈放射狀擺放的鉛筆 擺放整齊的共享單車 排列整齊的活鉛字 格式整齊的段落比格式雜亂的更好看 對齊擺放的物品比...
為什麼要人造元素 人造元素
如果按 重量 排隊,最重的幾個胖墩兒元素們都蹲在週期表的底部,它們就是 人造元素 目前,人造元素的科研價值遠大於實用價值,因此它們的名字對我們而言很陌生,但誰又敢低估這些胖墩們以後的潛力呢?我們所處的世界都是由元素組成。109種不同的地球元素,經過玄妙的組合,變成了山河湖海 寶石塵埃 有生命的動植物...
為什麼應盡量從列表的尾部進行元素的增加與刪除操作?
什麼是列表 列表是最常用的python資料型別,它可以作為乙個方括號內的逗號分隔值出現。列表的資料項不需要具有相同的型別 建立乙個列表,只要把逗號分隔的不同的資料項使用方括號括起來即可。如下所示 list1 1,2,3,4,5 list2 name people 原因 當列表從中間或從頭增加或刪除元...