有以下陣列
陣列:[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的陣列進行排序 演算法 依次...