什么是排序算法的穩定性?
穩定: 如果 a = b, a原本在b的前面, 排序之后, a仍然在b的前面, 那么這個排序算法就是穩定的。反之, 就是不穩定的排序算法。
穩定的排序算法有:
一.快速排序
思想:選取中間的數為基準值, 然后將比它小的放在左邊, 比它大的放在右邊, 然后將左右兩邊的數組進行同樣的操作, 使用遞歸的思想。
注意三點:
1.要判斷遞歸的邊界條件, 當數組的長度 <= 1 時, 跳出遞歸;
2.最后進行數組合并時, 需要將基準值也合并進去;
3.splice是對原數組進行操作, 返回的是要刪除的數組;
二.冒泡排序
冒泡排序的原理:
比方說有五個數字54321, 要按從小到大排列;
首先比較前兩個, 就是5和4, 如果第一個小于第二個, 不做操作, 如果第一個大于第二個, 那么交換二者的位置, 即變成45321, 然后比較第二個和第三個,交換位置, 變成43521, 然后第三個和第四個, 第四個和第五個, 這樣一次循環下來, 變成43215;
所以, 一層循環的效果就是挑出最大的一個數字5, 冒泡到最后面。接著相似方法挑出第二大, 第三大的數字等。那么一層循環就不夠用, 必須再嵌套一層。
像這個例子, 五個數字, 起碼要進行四輪循環才行。 至于為什么要this.length - i, 是因為第一次比較五個數字, 第二個只要比較前四個就行了,第五個肯定是最大的了。
改進后的冒泡排序:
改進的思路: 將每趟排序中最后一次進行交換的位置pos記錄下來, 下次排序只要掃描到pos即可。
三.選擇排序
最直觀的排序算法
依次找出第一大、 第二大、 第三大...依次放在數組中
歡迎關注。