<code><span>
$arr
</span> = [];
<span>
for
</span> (<span>
$i
</span> = <span>0</span>; <span>
$i
</span> 5000; <span>
$i
</span>++) {
<span>
$arr
</span>[] = rand(<span>1</span>, <span>50000</span>);
}
<span>
* 交换两个数的位置
*<span> @param</span>
$a
*<span> @param</span>
$b
*/</span><span><span>
function
</span><span>swap</span><span>(&<span>
$a
</span>,&<span>
$b
</span>)</span>{</span><span>
$temp
</span> = <span>
$b
</span>;
<span>
$b
</span> = <span>
$a
</span>;
<span>
$a
</span> = <span>
$temp
</span>;
}
<span>
</span><span><span>
function
</span><span>lchild</span><span>(<span>
$i
</span>)</span>{</span><span>
return
</span><span>
$i
</span>*<span>2</span>+<span>1</span>;}
<span>
</span><span><span>
function
</span><span>rchild</span><span>(<span>
$i
</span>)</span>{</span><span>
return
</span><span>
$i
</span>*<span>2</span>+<span>2</span>;}
<span>
</span><span><span>
function
</span><span>build_heap</span><span>(&<span>
$array
</span>,<span>
$i
</span>,<span>
$heapsize
</span>)</span>{</span><span>
$left
</span> = lchild(<span>
$i
</span>);
<span>
$right
</span> = rchild(<span>
$i
</span>);
<span>
$max
</span> = <span>
$i
</span>;
<span>
<span>
$max
</span> = <span>
$left
</span>;
}
<span>
<span>
$max
</span> = <span>
$right
</span>;
}
<span>
<span>
swap(<span>
$array
</span>[<span>
$i
</span>],<span>
$array
</span>[<span>
$max
</span>]);
build_heap(<span>
$array
</span>,<span>
$max
</span>,<span>
$heapsize
</span>);
}
}
<span>
</span><span><span>
function
</span><span>sortHeap</span><span>(&<span>
$array
</span>,<span>
$heapsize
</span>)</span>{</span><span>
while
</span>(<span>
$heapsize
</span>){ <span>
swap(<span>
$array
</span>[<span>0</span>],<span>
$array
</span>[<span>
$heapsize
</span>-<span>1</span>]);
<span>
$heapsize
</span> = <span>
$heapsize
</span> -<span>1</span>;
build_heap(<span>
$array
</span>,<span>0</span>,<span>
$heapsize
</span>); <span>
}
}
<span>
</span><span><span>
function
</span><span>createHeap</span><span>(&<span>
$array
</span>,<span>
$heapsize
</span>)</span>{</span><span>
$i
</span> =
ceil
(<span>
$heapsize
</span>/<span>2</span>)-<span>1</span>; <span>
build_heap(<span>
$array
</span>,<span>
$i
</span>,<span>
$heapsize
</span>);
}
}
<span>
</span><span><span>
function
</span><span>Heapsort</span><span>(<span>
$array
</span>)</span>{</span><span>
$heapsize
</span> =
count
(<span>
$array
</span>);
createHeap(<span>
$array
</span>,<span>
$heapsize
</span>);
sortHeap(<span>
$array
</span>,<span>
$heapsize
</span>);
<span>
return
</span><span>
$array
</span>;
}
<span>
$heapsort_start_time
</span> = microtime(<span>true</span>);
<span>
$heapsort_sort
</span> = Heapsort(<span>
$arr
</span>);
<span>
$heapsort_end_time
</span> = microtime(<span>true</span>);
<span>
$heapsort_need_time
</span> = <span>
$heapsort_end_time
</span> - <span>
$heapsort_start_time
</span>;
print_r(<span>
"堆排序耗时:"
</span> . <span>
$heapsort_need_time
</span> . <span>
"<br>"
</span>);
<span>
* 鸡尾酒排序
*<span> @param</span>
$arr
*<span> @
return
</span> mixed
*/</span><span><span>
function
</span><span>Cocktailsort</span><span>(<span>
$arr
</span>)</span> {</span><span>
$arr_len
</span> =
count
(<span>
$arr
</span>);
<span>
for
</span>(<span>
$i
</span> = <span>0</span> ; <span>
$i
</span>
$arr_len
/<span>2</span>) ; <span>
$i
</span> ++){
<span>
<span>
if
</span>(<span>
$arr
</span>[<span>
$j
</span>]
$arr
[<span>
$j
</span> + <span>1</span>] ){
swap(<span>
$arr
</span>[<span>
$j
</span>],<span>
$arr
</span>[<span>
$j
</span> + <span>1</span>]);
}
}
<span>
<span>
if
</span>(<span>
$arr
</span>[<span>
$j
</span>] > <span>
$arr
</span>[<span>
$j
</span> - <span>1</span>]){
swap(<span>
$arr
</span>[<span>
$j
</span>],<span>
$arr
</span>[<span>
$j
</span> - <span>1</span>]);
}
}
}
<span>
return
</span><span>
$arr
</span>;
}
<span>
$cocktailsort_start_time
</span> = microtime(<span>true</span>);
<span>
$cocktailsort_sort
</span> = Cocktailsort(<span>
$arr
</span>);
<span>
$cocktailsortt_end_time
</span> = microtime(<span>true</span>);
<span>
$cocktailsort_need_time
</span> = <span>
$cocktailsortt_end_time
</span> - <span>
$cocktailsort_start_time
</span>;
print_r(<span>
"鸡尾酒排序耗时:"
</span> . <span>
$cocktailsort_need_time
</span> . <span>
"<br>"
</span>);
<span>
* 希尔排序
*<span> @param</span>
$arr
*/</span><span><span>
function
</span><span>Shellsort</span><span>(<span>
$arr
</span>)</span>
{</span><span>
$n
</span>=
count
(<span>
$arr
</span>); <span>
{
<span>
for
</span>(<span>
$i
</span>=<span>
$gap
</span>;<span>
$i
</span>
$n
;++<span>
$i
</span>) <span>
{
<span>
{
swap(<span>
$arr
</span>[<span>
$j
</span>],<span>
$arr
</span>[<span>
$j
</span>+<span>
$gap
</span>]);
}
}
}
<span>
return
</span><span>
$arr
</span>;
}
<span>
$shellsort_start_time
</span> = microtime(<span>true</span>);
<span>
$shellsort_sort
</span> = Cocktailsort(<span>
$arr
</span>);
<span>
$shellsort_end_time
</span> = microtime(<span>true</span>);
<span>
$shellsort_need_time
</span> = <span>
$shellsort_end_time
</span> - <span>
$shellsort_start_time
</span>;
print_r(<span>
"希尔排序耗时:"
</span> . <span>
$shellsort_need_time
</span> . <span>
"<br>"
</span>);
<span>
* 直接选择排序
*<span> @param</span>
$arr
*<span> @
return
</span> mixed
*/</span><span><span>
function
</span><span>Straightselectsort</span><span>(<span>
$arr
</span>)</span>{</span><span>
$n
</span> =
count
(<span>
$arr
</span>);
<span>
for
</span>(<span>
$i
</span> = <span>0</span> ; <span>
$i
</span>
$n
- <span>1</span>;<span>
$i
</span>++){
<span>
$m
</span> = <span>
$i
</span>;
<span>
for
</span>(<span>
$j
</span> = <span>
$i
</span>+<span>1</span> ; <span>
$j
</span>
$n
; <span>
$j
</span>++){
<span>
if
</span>(<span>
$arr
</span>[<span>
$j
</span>]
$arr
[<span>
$m
</span>] ){
<span>
$m
</span> = <span>
$j
</span>;
}
<span>
if
</span>(<span>
$m
</span> != <span>
$j
</span>){
<span>
swap(<span>
$arr
</span>[<span>
$m
</span>],<span>
$arr
</span>[<span>
$j
</span>]);
}
}
}
<span>
return
</span><span>
$arr
</span>;
}
<span>
$straightselectsort_start_time
</span> = microtime(<span>true</span>);
<span>
$straightselectsort_sort
</span> = Cocktailsort(<span>
$arr
</span>);
<span>
$straightselectsort_end_time
</span> = microtime(<span>true</span>);
<span>
$straightselectsort_need_time
</span> = <span>
$straightselectsort_end_time
</span> - <span>
$straightselectsort_start_time
</span>;
print_r(<span>
"直接选择排序耗时:"
</span> . <span>
$straightselectsort_need_time
</span> . <span>
"<br>"
</span>);
<span>
* 计数排序
*<span> @param</span>
$arr
*<span> @
return
</span> mixed
*/</span><span><span>
function
</span><span>Countsort</span><span>(<span>
$arr
</span>)</span>{</span><span>
$max
</span> = <span>
$arr
</span>[<span>0</span>];
<span>
$min
</span> = <span>
$arr
</span>[<span>0</span>];
<span>
foreach
</span>(<span>
$arr
</span><span>
as
</span><span>
$key
</span> => <span>
$value
</span>) {
<span>
if
</span> (<span>
$value
</span> > <span>
$max
</span>) {
<span>
$max
</span> = <span>
$value
</span>;
}
<span>
if
</span> (<span>
$value
</span>
$min
) {
<span>
$min
</span> = <span>
$value
</span>;
}
}
<span>
<span>
$k
</span> = <span>
$max
</span> - <span>
$min
</span> + <span>1</span>;
<span>
for
</span>(<span>
$i
</span> = <span>0</span>; <span>
$i
</span>
$arr
) ; <span>
$i
</span> ++){
<span>
$c
</span>[<span>
$arr
</span>[<span>
$i
</span>] - <span>
$min
</span> ] +=<span>1</span>;
}
<span>
for
</span>(<span>
$i
</span>=<span>1</span>;<span>
$i
</span>
$c
); ++<span>
$i
</span>){
<span>
$c
</span>[<span>
$i
</span>] = <span>
$c
</span>[<span>
$i
</span>] + <span>
$c
</span>[<span>
$i
</span> - <span>1</span>];
}
<span>
for
</span>(<span>
$i
</span> =
count
(<span>
$arr
</span>);<span>
$i
</span> > <span>0</span> ; --<span>
$i
</span>){
<span>
$b
</span>[ -- <span>
$c
</span>[<span>
$arr
</span>[<span>
$i
</span>] - <span>
$min
</span>] ] = <span>
$arr
</span>[<span>
$i
</span>];
}
<span>
return
</span><span>
$b
</span>;
}
<span>
$countsort_start_time
</span> = microtime(<span>true</span>);
<span>
$countsort_sort
</span> = Cocktailsort(<span>
$arr
</span>);
<span>
$countsort_end_time
</span> = microtime(<span>true</span>);
<span>
$countsort_need_time
</span> = <span>
$countsort_end_time
</span> - <span>
$countsort_start_time
</span>;
print_r(<span>
"计数排序耗时:"
</span> . <span>
$countsort_need_time
</span> . <span>
"<br>"
</span>);
</code>