Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 检查数组是否可以在单次交换中按升序排序_Php_Arrays - Fatal编程技术网

Php 检查数组是否可以在单次交换中按升序排序

Php 检查数组是否可以在单次交换中按升序排序,php,arrays,Php,Arrays,我有一个数组,比如说$a=array(1,2,6,4,5,3)可按交换升序排序,例如交换6和交换3。如果这是可能的,那么我的函数应该返回true,如果不是,那么返回false。例如,数组(10,30,20,40,50,60,70)返回true,而数组(80,10,30,20,40,50,60,70)返回false,因为按升序对数组进行排序需要多次交换,到目前为止,我已经完成了这项工作 function checksort($arr) { for ($i = count($arr) - 1

我有一个数组,比如说
$a=array(1,2,6,4,5,3)可按交换升序排序,例如交换6和交换3。如果这是可能的,那么我的函数应该返回true,如果不是,那么返回false。例如,数组(10,30,20,40,50,60,70)返回true,而数组(80,10,30,20,40,50,60,70)返回false,因为按升序对数组进行排序需要多次交换,到目前为止,我已经完成了这项工作

function checksort($arr) {
    for ($i = count($arr) - 1; $i > 0; $i--) {
        if ($arr[$i] < $arr[$i - 1]) {
            $j = $i - 1;
            while ($j > 0) {
                $j--;
                $temp = $arr[$i];
                $arr[$i] = $arr[$j + 1];
                $arr[$j + 1] = $temp;
                break;
            }
        }
    }
    $sortedarray = $arr;
    sort($arr);
    if ($sortedarray == $arr) {
        return true;
    }
    return false;
}
$a = array(1, 2, 6, 4, 5, 3);
echo checksort($a);
函数检查排序($arr){
对于($i=计数($arr)-1;$i>0;$i--){
如果($arr[$i]<$arr[$i-1]){
$j=$i-1;
而($j>0){
$j--;
$temp=$arr[$i];
$arr[$i]=$arr[$j+1];
$arr[$j+1]=$temp;
打破
}
}
}
$sortedarray=$arr;
排序($arr);
如果($sortedarray==$arr){
返回true;
}
返回false;
}
$a=数组(1,2,6,4,5,3);
回声检查排序($a);

我得到的结果应该是假的。我知道问题是因为数组在for循环中的每个真实条件下都会被重写,但同时
$I
会得到-1,并且它会到达无法进一步检查整个数组的条件的点。

您的函数将只交换相邻的项,而不会在数组的另一端交换项

只查看原始数组和排序数组中的差异可能会更简单,这意味着这将给出无序的项数。如果超过2,则返回false,否则返回true

function checksort($arr){
    $b = $arr;
    sort($b);
    return count(array_diff_assoc($arr, $b))<=2;
}
函数检查排序($arr){
$b=$arr;
分类(乙元);;

返回计数(数组差异关联($arr,$b))您是否可以将原始数组与存储的数组版本进行比较,如果更改了2个以上的位置,则返回false。这不是一个完整的排序算法,它只传递1次。如果数组已经排序,该怎么办?返回
true
false
?@tim您已经对数组进行了排序,我们为什么还要检查?:我想你想要
@abracadver,我已经更新了它-我有时会对什么是真/假感到困惑:-/