演算法day2 複雜度和簡單排序演算法(2)

2022-10-10 14:39:10 字數 807 閱讀 6208

有以下陣列

陣列:[2,4,3,6,1]

序號:[0,1,2,3,4]

第一次排序(範圍0~0):2左邊沒東西,不動

第二次排序(範圍0~1):4左邊是2,4大不動

第三次排序(範圍0~2):3左邊是4,移動,再左邊是2,3大不動

第四次排序(範圍0~3):以此類推,直到排序結束

這個過程有點像拿撲克牌,把抽到的牌插到適合的地方

注:演算法的時間複雜度是按照其最差情況下的來算的

1)在乙個有序陣列中,找某個數是否存在【經典二分】

方法1:遍歷(時間複雜度o(n))

方法2:二分法(時間複雜度o(log2n))

​ 設要找的數是num,每次取陣列的中間值x與num比較

若x>num,那麼陣列中位於x右邊的數不用找了,在x左邊繼續取中間值比較

若x若x=num,...

直到找到num

2)在乙個有序陣列中,找》=某個數最左側的位置

3)區域性最小值問題【一般二分用於有序情況,但無序也可以用】

區域性最小定義:

在乙個無序陣列中,人格相鄰數一定不相等

例:在無序陣列中找到乙個區域性最小值

先做兩個判斷:

0位置是否存在區域性最小;(有就直接返回0位置)

n-1位置是否存在區域性最小;(有就直接返回n-1位置)

若上述區域性最小不存在,則0位置到n-1位置上比存在區域性最小

再取中間位置m,判斷區域性最小是否存在(有就直接返回m位置)

若上述區域性最小不存在,取m的左邊或者右邊繼續二分,直到找出乙個區域性最小即可

簡單排序演算法以及其複雜度

選擇排序,時間複雜度 o n 2 下面要注意c語言傳參入陣列傳入的是位址!所以用sizeof求陣列大小的時候,在自定義函式中求出來的sizeof arr 就是指標的大小,為4 64位系統的話是8 所以要在main函式中傳入自定義方法給陣列大小1 include 2 define arrsize ar...

Day2 時間複雜度演算法

複雜度分析是整個演算法學習的精髓,只要掌握了它,資料結構和演算法的內容基本上就掌握了一半。int cal int n return sum 總共執行了2n 2次 可以發現 所有 的執行時間 t n 與每行 的執行次數 n 成正比。t n 表示 執行的時間 n 表示資料規模的大小 f n 表示每行 執...

1 時間複雜度和簡單排序

常數的時間操作 乙個操作如果和資料量沒有關係,每次都是固定時間操作,叫做常數操作。時間複雜度常用o 讀作big o 來表示。具體來說,在常數運算元量的表示式中,只要高階項,不要低階項,也不要高階項的係數,剩下的部分記為f n 那麼時間複雜度記為 o f n 對乙個長度為n的陣列進行排序 演算法 依次...