符合字典序且不破壞相對位置用棧
排序演算法穩定性:看相對位置是否能改變。
如果當前元素比乙個元素小,而該小的元素又出現在乙個和當前元素相等的元素後面,那麼交換後穩定性就被破壞了。
比較拗口,舉個例子,序列5 8 5 2 9, 我們知道第一遍選擇第1個元素5會和2交換,那麼原序列中2個5的相對前後順序就被破壞了。
簡單的數字不需要考慮穩定性,但是複雜的物件中想要得到的邏輯就會多做一些事情
如果不需要額外空間的方法,就往位運算上想
位運算學習
與運算的用途:
1. 清零
如果想將乙個單元清零,即使其全部二進位制位為0,只要與乙個各位都為零的數值相與,結果為零。
2. 取乙個數的指定位
比如取數 x=1010 1110 的低4位,只需要另找乙個數y,令y的低4位為1,其餘位為0,即y=0000 1111,然後將x與y進行按位與運算(x&y=0000 1110)即可得到x的指定位。
3. 判斷奇偶
只要根據最未位是0還是1來決定,為0就是偶數,為1就是奇數。因此可以用if ((a & 1) == 0)代替if (a % 2 == 0)來判斷a是不是偶數。
或運算的用途:
常用來對乙個資料的某些位設定為1
比如將數 x=1010 1110 的低4位設定為1,只需要另找乙個數y,令y的低4位為1,其餘位為0,即y=0000 1111,然後將x與y進行按位或運算(x|y=1010 1111)即可得到。
異或的幾條性質:
1、交換律
2、結合律 (a^ b)^ c == a^ (b^c)
3、對於任何數x,都有 x^ x=0,x^0=x
4、自反性: a^ b^ b=a^0=a;
異或運算的用途:
1. 翻轉指定位
比如將數 x=1010 1110 的低4位進行翻轉,只需要另找乙個數y,令y的低4位為1,其餘位為0,即y=0000 1111,然後將x與y進行異或運算(x^y=1010 0001)即可得到。
2. 與0相異或值不變
例如:1010 1110 ^ 0000 0000 = 1010 1110
3. 交換兩個數
void
swap
(int
&a,int
&b)}
取反運算的用途:
1)使乙個數的最低位為零
使a的最低位為0,可以表示為:a & ~ 1。~1的值為 1111 1111 1111 1110,再按"與"運算,最低位一定為0。因為「 ~」運算子的優先順序比算術運算子、關係運算子、邏輯運算子和其他運算子都高。
位運算例項
位運算子 與 或 異或 非 左移運算子 右移運算子 1 例項一 給定字母字串a和字串b,判斷a是否包含所有字母b。這題有很多解法,讓我們回憶一下,最常用的陣列如何解呢。我們維護乙個26長度的陣列,a.z對應陣列的下表是1.26,每個index對應的取0或1,如果存在即為1,如果不存在即為0。遍歷字元...
位運算計算方式與例項
1.非 是乙個單目運算子,只有乙個運算物件。0變成1,1變成0。例如 二進位制1000 1101 進行位邏輯非運算為 0111 0010,對應十進位制 141等於 142。正數取反 對應的負數 1 負數取反 對應的正數 1 例如 14 15 14 13 2.與 將兩個物件按位與運算,1與1等於1,1...
PCB SQL SERVER 位運算應用例項
在pcb行業,乙個產品可能同時在多個工廠生產,舉例 乙個產品一條主記錄,這條記錄中會對應多個工廠的產地,而這個工廠產地個數不確定,那麼如何設計表結構儲存這個不確定的工廠呢?這裡想到了4個方式儲存 一.主外來鍵一對多的方式 產品為主鍵,主表,而工廠放到外來鍵,為副表,這樣就可以實現一對多的方式。二.主...