代码之家  ›  专栏  ›  技术社区  ›  Tigran Mkrtchyan

数组排序自定义算法使用(PHP)

  •  -1
  • Tigran Mkrtchyan  · 技术社区  · 7 年前

    http://sandbox.onlinephpfunctions.com/code/971f4a6c9dfe80ec6277dd89653ea160af3c68e4

    我找不到解决办法。。请帮助返回更改的数组

    密码

    <?php
        function bell_sort($arr, $head, $tail, $queue) {
    
    
         if($head != $tail){
             $min = $arr[$head];
             $min_index = $head;
    
             for($i = $head; $i <= $tail; ++$i){
                 if($arr[$i] < $min){
                     $min = $arr[$i];
                     $min_index = $i;
                 }
             }
    
             if($queue){
                 $tmp = $arr[$head];
                 $arr[$head] = $arr[$min_index];
                 $arr[$min_index] = $tmp;
                 $head++;
             }else{
                 $tmp = $arr[$tail];
                 $arr[$tail] = $arr[$min_index];
                 $arr[$min_index] = $tmp;
                 $tail--;
             }
    
            bell_sort($arr, $head, $tail, !$queue);  
    
            }else{
             return $arr;
            }
    
    
         }
    
    
        $n = 10;
    
        for($i = 0; $i < $n; ++$i){
            $arr[$i] = rand(0, 100);
        }
    
        $head = 0;
        $tail = count($arr) - 1;
        $queue = 1; 
        $new_arr = bell_sort($arr, $head, $tail, $queue);
    
        var_dump($new_arr);
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Daniel user3757731    7 年前

    中的一个递归路径中缺少return语句 bell_sort 作用

         if($queue){
             $tmp = $arr[$head];
             $arr[$head] = $arr[$min_index];
             $arr[$min_index] = $tmp;
             $head++;
         }else{
             $tmp = $arr[$tail];
             $arr[$tail] = $arr[$min_index];
             $arr[$min_index] = $tmp;
             $tail--;
         }
    
        bell_sort($arr, $head, $tail, !$queue);  
    

    将行上方的行更改为

        return bell_sort($arr, $head, $tail, !$queue);
    

    它会起作用的