快速排序學習

2021-08-25 13:51:38 字數 1106 閱讀 4542

下面是我寫的

** :

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 將基準數挖出...