自己重寫了一下快速排序的演算法

2021-08-14 14:28:58 字數 1006 閱讀 6856

今天上網看快速排序,發現這麼乙個經典的演算法網上貼出的**要不有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....