下面是我寫的
** :
public function quicksortme(a:array,left:int,right:int):void
/*** 一般來說,插入排序都採用in-place在陣列上實現。具體演算法描述如下:
* 1. 從第乙個元素開始,該元素可以認為已經被排序
* 2. 取出下乙個元素,在已經排序的元素序列中從後向前掃瞄
* 3. 如果該元素(已排序)大於新元素,將該元素移到下一位置
* 4. 重複步驟3,直到找到已排序的元素小於或者等於新元素的位置
* 5. 將新元素插入到該位置中
* 6. 重複步驟2
* @param p
* @param left
* @param right
* @return
*/ public function _insertionsort(p:array,left:int,right:int):array
if (a[left] > a[right])
if (a[center] > a[right])
return center;}
如何優化:
1.切分時的值的選擇,如果1~10 需要排序 最理想的中間值是5 因為我們只需要移動賦值一半就ok了對吧?
所以呢先驅們想出了很多辦法.....如:
1.k(中間值)=left或者=right;
2.k=a[left,right]中的隨機的乙個元素
3.在a中 隨機取出幾個元素 形成|m| 然後再m 中的中值作為 |a|的中值
由於3需要例外的開銷!俺放棄了 所以算用隨機選擇的方法!
2.當問題規模比較小時,我們可以用插入排序!
接下來的時間 俺研究第2個優化方法!
/***快速排序
* @param a
* @param cmp
*/ public function quicksortme(a:array,left:int,right:int):void{
if(left0 && temp
經過優化之後,資料量小的時候看不出來 比如n=1000 任然一樣是 4毫秒!但是如果達到10w 就會有所改善!
快速排序學習
快速排序利用了分治策略。分治策略可以分為3個步驟 對乙個典型的子陣列a p.r 進行快速排序的分治過程如下 快速排序的偽 如下 為了排序陣列a的全部元素,初始呼叫quicksort a,1,a.length 其中最關鍵的部分就是陣列的劃分partition,它實現了對子陣列a p.r 的原址重排。偽...
快速排序學習
簡單原理 快速排序是對氣泡排序的改進,用分而治之的思想,先找到乙個基準數,利用基準數進行一輪排序,將所有比它小的數都放在左邊,再將所有比它大的數都放在它右邊,然後返回基準數的位置,進行下一輪排序,下一輪將分別對基準數左右兩邊進行排序,依次迴圈,直到最後排序完成。實現 import org.codew...
C 快速排序 隨機快速排序 學習記錄
都是網上的資源,侵刪。快速排序演算法以及其他演算法的時間以及空間複雜度 我認為比較好理解的思路 1 先從數列中取出乙個數作為基準數。2 分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。3 再對左右區間重複第二步,直到各區間只有乙個數。坑填數1 i l j r 將基準數挖出...