這篇部落格,主要是最近學習演算法導論時的一些收穫,是關於直接選擇排序,直接插入排序,二分查詢的一些優化。
資料結構課本上的直接選擇排序就是每次選出乙個最小的拿到最前面來:
function
straightselectsort
(arr)
}if (k !== i)
}}
但是我們考慮一下,有沒有可以優化的地方呢?既然我們每次都可以將最小的拿出來,那麼是不是每次我們也可以將最大的拿出來呢?也就是說,我們需要在找最小的過程種同時進行找出最大的,並將最大的放到最後,這樣我們時間複雜度就可以減少一半,下面來看**:
function
straightselectsort
(arr) else
if (arr[i] > curr)
}if (l !== left)
if (r !== left)
// 陣列進行收斂
left++;
right--;
}return arr;
}
直接插入排序,是將乙個數字插入到乙個已經排好序的序列中,課本上的做法是,將這個數字與已經排好序的序列中的每乙個數字進行比較,直到找出合適的位置:
function
insertionsort
(arr)
arr[j + 1] = key;
}return arr;
}
這裡也有值得優化的地方,那就是找位置,我們假如採取二分查詢的方法將位置找出來,這樣就可以減少我們的比較的次數,從而對我們的演算法進行一些優化:
function insertionsort (arr)
arr[index] = key;
}return arr;
}function binaryfindpos (arr, s, value)
return left;
}
基礎排序演算法詳解與優化
文章儲存在github,網速不佳的朋友,請看 基礎排序演算法詳解與優化 或者 來我的技術小站 godbmw.com 常見的基礎排序有選擇排序 氣泡排序和插入排序。眾所周知,他們的時間複雜度是 o n n 但是,現在要重新認識一下基礎排序演算法,尤其是 插入排序 在近乎有序的情況下,插入排序的時間複雜...
基礎排序演算法詳解與優化
文章儲存在github,網速不佳的朋友,請看 基礎排序演算法詳解與優化 或者 來我的技術小站 godbmw.com 常見的基礎排序有選擇排序 氣泡排序和插入排序。眾所周知,他們的時間複雜度是 o n n 但是,現在要重新認識一下基礎排序演算法,尤其是 插入排序 在近乎有序的情況下,插入排序的時間複雜...
基礎排序演算法詳解與優化
文章儲存在github,網速不佳的朋友,請看 基礎排序演算法詳解與優化 或者 來我的技術小站 godbmw.com 常見的基礎排序有選擇排序 氣泡排序和插入排序。眾所周知,他們的時間複雜度是 o n n 但是,現在要重新認識一下基礎排序演算法,尤其是 插入排序 在近乎有序的情況下,插入排序的時間複雜...