21,886
社区成员
发帖
与我相关
我的任务
分享
<?php
$ar = array(1,3,2,8,3,5,6,10,13,27,24);
bubble_sort($ar);
print_r($ar);
function bubble_sort(&$ar)
{
$ar_count = count($ar);
$temp = null;
for($i= 0 ; $i < $ar_count; $i ++)
{
for($j = 0 ; $j < $ar_count - $i - 1; $j++)
{
if($ar[$j] > $ar[$j+1])
{
$temp = $ar[$j];
$ar[$j] = $ar[$j+1];
$ar[$j+1] = $temp;
}
}
}
}
<?php
$ar = array(1,3,2,8,3,5,6,10,13,27,24);
bubble_sort($ar);
print_r($ar);
function bubble_sort(&$ar)
{
$ar_count = count($ar);
$temp = null;
for($i= 0 ; $i < $ar_count; $i ++)
{
$flag = true;
for($j = 0 ; $j < $ar_count - $i - 1; $j++)
{
if($ar[$j] > $ar[$j+1])
{
$flag = false;
$temp = $ar[$j];
$ar[$j] = $ar[$j+1];
$ar[$j+1] = $temp;
}
}
echo join(',', $ar), PHP_EOL;
if($flag)
return;
}
}
static void _zend_qsort_swap(void *a, void *b, size_t siz)
{
register char *tmp_a_char;
register char *tmp_b_char;
register int *tmp_a_int;
register int *tmp_b_int;
register size_t i;
int t_i;
char t_c;
tmp_a_int = (int *) a;
tmp_b_int = (int *) b;
for (i = sizeof(int); i <= siz; i += sizeof(int)) {
t_i = *tmp_a_int;
*tmp_a_int++ = *tmp_b_int;
*tmp_b_int++ = t_i;
}
tmp_a_char = (char *) tmp_a_int;
tmp_b_char = (char *) tmp_b_int;
for (i = i - sizeof(int) + 1; i <= siz; ++i) {
t_c = *tmp_a_char;
*tmp_a_char++ = *tmp_b_char;
*tmp_b_char++ = t_c;
}
}
ZEND_API void zend_qsort(void *base, size_t nmemb, size_t siz, compare_func_t compare TSRMLS_DC)
{
void *begin_stack[QSORT_STACK_SIZE];
void *end_stack[QSORT_STACK_SIZE];
register char *begin;
register char *end;
register char *seg1;
register char *seg2;
register char *seg2p;
register int loop;
uint offset;
begin_stack[0] = (char *) base;
end_stack[0] = (char *) base + ((nmemb - 1) * siz);
for (loop = 0; loop >= 0; --loop) {
begin = begin_stack[loop];
end = end_stack[loop];
while (begin < end) {
offset = (end - begin) >> 1;
_zend_qsort_swap(begin, begin + (offset - (offset % siz)), siz);
seg1 = begin + siz;
seg2 = end;
while (1) {
for (; seg1 < seg2 && compare(begin, seg1 TSRMLS_CC) > 0;
seg1 += siz);
for (; seg2 >= seg1 && compare(seg2, begin TSRMLS_CC) > 0;
seg2 -= siz);
if (seg1 >= seg2)
break;
_zend_qsort_swap(seg1, seg2, siz);
seg1 += siz;
seg2 -= siz;
}
_zend_qsort_swap(begin, seg2, siz);
seg2p = seg2;
if ((seg2p - begin) <= (end - seg2p)) {
if ((seg2p + siz) < end) {
begin_stack[loop] = seg2p + siz;
end_stack[loop++] = end;
}
end = seg2p - siz;
}
else {
if ((seg2p - siz) > begin) {
begin_stack[loop] = begin;
end_stack[loop++] = seg2p - siz;
}
begin = seg2p + siz;
}
}
}
}
$ar = array(24,1,3,2,8,3,5,6,10,13,27);
bubble_sort($ar);
function bubble_sort(&$ar)
{
$ar_count = count($ar);
$temp = null;
for($i= 0 ; $i < $ar_count; $i ++)
{
for($j = 0 ; $j < $ar_count - $i - 1; $j++)
{
if($ar[$j] > $ar[$j+1])
{
$temp = $ar[$j];
$ar[$j] = $ar[$j+1];
$ar[$j+1] = $temp;
}
}
echo join(',', $ar), PHP_EOL; //观察这里的输出
}
}
1,3,2,8,3,5,6,10,13,24,27
1,2,3,3,5,6,8,10,13,24,27 到这里排序已经结束
1,2,3,3,5,6,8,10,13,24,27 从这里开始,以下都是无效劳动
1,2,3,3,5,6,8,10,13,24,27
1,2,3,3,5,6,8,10,13,24,27
1,2,3,3,5,6,8,10,13,24,27
1,2,3,3,5,6,8,10,13,24,27
1,2,3,3,5,6,8,10,13,24,27
1,2,3,3,5,6,8,10,13,24,27
1,2,3,3,5,6,8,10,13,24,27
1,2,3,3,5,6,8,10,13,24,27
大有优化的余地