美文网首页
一个没有循环的排序方法

一个没有循环的排序方法

作者: 猿来是八阿哥 | 来源:发表于2019-07-29 18:17 被阅读0次

不使用循环,对数组进行排序

代码

<?php
// 不使用循环对 $data 进行排序
function random_array($length=10){
    $walk = array_fill(0, $length, 0);
    array_walk($walk, function($value, $key) use (&$data){
        $data[$key] = random_int(0, 100);
    });
    return $data;
}
$data = random_array(10);

define('RECURSION_SORT_MAX',  99999999);
define('RECURSION_SORT_MIN', -99999999);
function find_max_with_bound($data, $bound=RECURSION_SORT_MAX, $max=RECURSION_SORT_MIN, $index=0, $max_index=-1){
    if($index != count($data)) {
        if ($bound >= $data[$index] && $data[$index] >= $max) {
            $max = $data[$index];
            $max_index = $index;
        }
        list($max_index, $max) = find_max_with_bound($data, $bound, $max, $index+1, $max_index);
    }
    return [$max_index, $max];
}
function recursion_sort($data, &$sorted=[]){
    if(count($data) != count($sorted)){
        $sorted_max = count($sorted) == 0 ? RECURSION_SORT_MAX : $sorted[count($sorted)-1];
        list($max_index, $max) = find_max_with_bound($data, $sorted_max);
        $data[$max_index] = RECURSION_SORT_MIN;
        array_push($sorted, $max);
        recursion_sort($data, $sorted);
    }
    return $sorted;
}
echo 'data before sorting: '.PHP_EOL;
print_r($data);
echo 'data sorted: '.PHP_EOL;
print_r(recursion_sort($data));

结果

data before sorting: 
Array
(
    [0] => 45
    [1] => 96
    [2] => 30
    [3] => 83
    [4] => 80
    [5] => 36
    [6] => 65
    [7] => 72
    [8] => 14
    [9] => 46
)
data sorted: 
Array
(
    [0] => 96
    [1] => 83
    [2] => 80
    [3] => 72
    [4] => 65
    [5] => 46
    [6] => 45
    [7] => 36
    [8] => 30
    [9] => 14
)

相关文章

  • 一个没有循环的排序方法

    不使用循环,对数组进行排序 代码 结果

  • 数组内部对象排序(sort)

    1.数组排序有很多方法比如for,while循环去进行冒泡排序或者快速看、排序等多种排序方法 而我在这里要说的是苹...

  • 基础排序算法

    冒泡排序 排序原理:每次循环将末尾的最小的数往上冒,如果没有交换则跳出循环 跳出循环条件:如果一次循环没有交换说明...

  • 快速排序

    快速排序 思想: 每个循环都可以确定一个数字的位置,使用递归的方法进行排序。 代码: #include #inc...

  • java 对象数组排序

    java对象List集合的排序(基本类型相似); 方法一:使用for循环的方式来进行对象List集合的排序;方法二...

  • JS07

    A 实参 形参 argument while循环 插入排序 arguments 元素能不能 冒泡排序 数组的方法

  • 算法:基础排序

    1、冒泡排序 2、选择排序思路:遍历2层循环,外层循环+内层循环找出一个最小值与外层循环交换位置。 3、插入排序思...

  • 算法学习之选择排序

    PS:选择排序的方法是每次循环先选择一个最小值放在选择的位置上

  • 关于冒泡排序的简单优化

    一说到冒泡排序,学过C语言的人都不会陌生.冒泡排序一个简单易懂的排序方法,使我们很好的掌握了两层for循环的用法....

  • 15. 3Sum.go

    先进行排序然后写个从两端向中间处理的方法最后循环调用这个方法

网友评论

      本文标题:一个没有循环的排序方法

      本文链接:https://www.haomeiwen.com/subject/cfjirctx.html