演算法(1) 快速排序的非遞迴實現

2021-10-05 08:51:13 字數 1039 閱讀 3252

快速排序的核心思想,是根據基準值,將陣列分成兩部分,

其中左邊部分全部小於基準值,右邊部分全部大於基準值,基準值一般取

陣列中間的數,也可以取多個數的平均值。之後,分別對左邊部分和右邊部分進行排序,左邊和右邊都排序好了,整個陣列也就排序好了。同樣地,左邊部分和右邊部分又可以繼續按這種思路對半排序。採取這種分而治之(分治法)的演算法,可以實現快速排序。以下是這種方法的非遞迴實現。

<?php

/***

*@param array

**@return array

*@author ldy

*/function

quick_sort

($arr

)// 這裡將分組資訊儲存到stack棧

$stack

=['middle'

=>

$middle

,// 'leftarr' => $leftarr,

'rightarr'

=>

$rightarr,]

;if(count

($leftarr

)<2)

array_push

($sorted

,$parent

['middle'])

;//上一次分組的基準值比$sorted中的值都更大,但比未入併入$sorted的值都更小if(

count

($parent

['rightarr'])

<2)

else}}

else

}else

}while(!

empty

($arr))

;return

$sorted;}

$arr=[

20,2,

3,24,

19,14,

12,30]

;print_r

(quick_sort

($arr))

;

快速排序實現(遞迴 非遞迴)

首先是劃分演算法,假設每次都以第乙個元素作為樞軸值,進行一趟劃分 int partition int a,int low,int high a low pivot 將樞軸值元素置於最終位置 return low 第乙個while迴圈裡的 還可以採用如下形式 while low high a high...

快速排序非遞迴演算法

本人根據書上的三數中值快速排序修改 struct leftright inline void swap int a,int b void qsort int a,int left,int right for int m 1 0 k ma center swap a left a center if ...

快速排序 非遞迴演算法

include stdafx.h include using namespace std int myarray void printarray int array,int len printf r n int partition int s,int l,int r 從左向右找大於或等於x的數來填s...