今天上網看快速排序,發現這麼乙個經典的演算法網上貼出的**要不有bug,要不就是運算的步驟還是冗餘了,所以自己重新寫了個,看了下結果應該是減少大部分不需要的步驟。
希望各位路過的道友幫忙驗證下有沒有bug
先貼下運算結果:
//startk 開始鍵值 endk結束鍵值 dg:遞迴深度
函式**:
public function qsort(&$arr = array(),$startkey = 0,$endkey = 0,$dg = 1)
$sk = $startkey;
$ek = $endkey;
$exck = $startkey;
$excv = $arr[$startkey];
$llock = true;
$rlock = false;
while (($ek != $exck || !$llock) && ($sk != $exck || !$rlock))elseif (!$rlock)
if ($ek <= $sk)
if ($excv < $arr[$sk] && ($sk < $exck))elseif (!$llock)
}if ($exck- $startkey > 1)
if ($endkey - $exck > 1)
return ;
}
思路:在乙個無序的數列中,
1、選取第乙個數作為基準數 $exck => $excv,從數列最後$ek往前篩選,當$arr[$ek]比$excv小時,兩者互換位置,$exck = $ek ;
2、改由數列的最前端sk向後篩選,當$arr[sk]比excv大時,兩者互換位置,$exck = $sk;
3、繼續換回到從$ek往前篩選
直到$ek <= $sk ,在 $exck的位置拆分陣列,進入遞迴。
總結一下快速排序演算法
使用快速排序演算法將陣列中的數從小到大排序 先取陣列第乙個數作為key,陣列第乙個位置為first,陣列最後乙個元素作為last,last先和key比較,如果比key小,就把last放到first的位置。如果比key大,那麼last將減一,直到last的位置所在的數比key小,然後把last所在的位...
鍊錶 自己動手寫了一下C 的
鍊錶是一種資料結構,是一種功能極其強大的陣列。鍊錶可以很輕鬆的進行增添,刪除,插入節點。目錄鍊錶 單向鍊錶 1.建立鍊錶 1.1建立節點 1.2初始化 2.鍊錶長度 3.鍊錶列印 4.查詢節點 5.刪除節點 6.增加節點 7.修改節點 完整 初學者一般先從單向鍊錶開始,單向鍊錶的操作一般包括 建立,...
重溫一下各種排序演算法
最近打算用一些併發的模型研究一下排序演算法.所以,我首先回顧了一下各種排序演算法,並將它們用c語言實現了.氣泡排序 基本思想 先取第乙個元素,將它與後面n 1個元素比較,將n個元素中最小的移到首部.接著,忽略第乙個元素,取第二個元素,將它與後面的n 2個元素比較,將n 1個 元素中最小的移到位置2....