基本算法

set_time_limit(0);
//冒泡排序

//原理 把待排序数组中的值两两比较,如果符合要求不变,不符合要求 交换位置

function BubbleSort($arr)
{
//获取数组长度
l e n = c o u n t ( len = count( len=count(arr);
//控制冒泡循环的次数
for( i = 1 ; i=1; i=1;i< l e n ; len; len;i++){
//控制比较的次数
for( j = 0 ; j=0; j=0;j< l e n − len- leni;KaTeX parse error: Expected '}', got 'EOF' at end of input: … if(arr[$j] < a r r [ arr[ arr[j+1]){
list( a r r [ arr[ arr[j], a r r [ arr[ arr[j+1]) = [ a r r [ arr[ arr[j+1], a r r [ arr[ arr[j]];
}

    }

}

return $arr;

}

//快速排序
//选择一个基准数,让你后进行比较 比基准数高放一边 矮的放另一边 然后一次改变基准数 实现排序
function QuickSort($arr)
{
l e n = c o u n t ( len = count( len=count(arr);
if($len<=1){
return $arr;
}

//选择一个基准数
//选择整个数组的第一个值作为基准数,这样可以保证数组中的每个值都哦参与比对
$base_num = $arr[0];
$behind = [];
$before = [];
for($i=1;$i<$len;$i++){
    if($arr[$i]>$base_num){
        $behind[] = $arr[$i];
    }else{
        $before[] = $arr[$i];
    }
}

$right = QuickSort($behind);
$left = QuickSort($before);
$arr = array_merge($left,[$base_num],$right);

return $arr;

}

//选择排序
//从待排数据中找到最小或最大的值,放在启示的位置

function SelectSort($arr)
{
l e n = c o u n t ( len = count( len=count(arr);

    for($i=0;$i<$len-1;$i++){
        //假设最小值的位置
        $min = $i;
        for ($j=$i+1; $j < $len; $j++) { 
            //如果发现有值比我们假设的值小 改变最小值的位置
            if($arr[$min] >$arr[$j]){
                $min = $j; 
            }
            
        }
        //如果最小值的位置和我们假设的不一样,说明存在比假设值更小的值,那么就把两个值的位置进行交换
        if($min !=$i){
              list($arr[$i],$arr[$min]) = [$arr[$min],$arr[$i]];
        }
  
    }


    return $arr;

}

/*

@content 二分查找

*/

function BinSearch( a r r , arr, arr,start, e n d , end, end,search){
if( e n d &gt; = end&gt;= end>=start){
m i d = c e i l ( ( mid = ceil(( mid=ceil((start+ e n d ) / 2 ) ; i f ( end)/2); if( end)/2);if(arr[ m i d ] = = mid] == mid]==search){
return KaTeX parse error: Expected 'EOF', got '}' at position 14: mid; }̲elseif(arr[ m i d ] &gt; mid]&gt; mid]>search){
return BinSearch( a r r , arr, arr,start, m i d − 1 , mid-1, mid1,search);
}else{
return BinSearch( a r r , arr, arr,mid+1, e n d , end, end,search);
}
}else{
return false;
}
}

//插入排序
//已知有序数组 如果没有可以认为有一个空数组(空数组实际上有序的) 要添加一个新的数据(可以是一个数组),让这个数组仍然有序

function InsertSort($arr)
{
l e n = c o u n t ( len = count( len=count(arr);

//我们要区分那部分是有序的 那部分是无序的

for($i=1;$i<$len;$i++){
    //获得要比较的值
    $tmp = $arr[$i];
    for ($j=$i-1; $j >=0 ; $j--) { 
       if($tmp < $arr[$j]){
        //$arr[$j+1] = $arr[$j];
        list($arr[$j+1],$arr[$j]) = [$arr[$j],$arr[$j+1]];
        //$tmp = $arr[$j];
       }else{
        break;
       }
    }
}

return $arr;

}

function f(KaTeX parse error: Expected '}', got 'EOF' at end of input: num){ if(num<2){
return 1;
}else{
s t e p s = f ( steps = f( steps=f(num-1)+f($num-2);
return KaTeX parse error: Expected 'EOF', got '}' at position 12: steps; }̲ } //待排序数组 //arr = [7,1,12,4,6,5,8,2,3,9,10,15];

// d a t a = I n s e r t S o r t ( data = InsertSort( data=InsertSort(arr);

//print_r($data);
//echo f(40);

/1、案例描述:
求由5个不重复的数字组成的任意不重复三位数,编写一个类实现 列举出所有满足条件的三位数。
1.考虑5个数字中不含有0的情况
2.考虑5个数字中含0的情况
3.输出所有满足条件的三位数并且统计个数
4.函数的原型为 function Getenum($data=[])
$data 为传入的数字数组
5.只允许使用count数组函数,其他函数一律不准使用
/

function GetNum($arr)
{
l e n = c o u n t ( len = count( len=count(arr);
//取出第一位数
for( i = 0 ; i=0; i=0;i< l e n ; len; len;i++){
//取出第二个数
if( a r r [ arr[ arr[i]==0){
continue;
}
for ($j=0; j &lt; j &lt; j<len ; KaTeX parse error: Expected '}', got 'EOF' at end of input: … for (k=0; k &lt; k &lt; k<len ; KaTeX parse error: Expected '}', got 'EOF' at end of input: … if(arr[$i] == a r r [ arr[ arr[j] || a r r [ arr[ arr[i] == a r r [ arr[ arr[k] || a r r [ arr[ arr[k] == a r r [ arr[ arr[j]){
continue;
}else{
//生成三位数
$num[] = a r r [ arr[ arr[i]. a r r [ arr[ arr[j]. a r r [ arr[ arr[k];
// $num[] = a r r [ arr[ arr[i]*100+ a r r [ arr[ arr[j]*10+ a r r [ arr[ arr[k];
}
}
}
}

return $num;

}

/*
a r r = [ 0 , 2 , 3 , 4 , 5 ] ; p r i n t r ( G e t N u m ( arr = [0,2,3,4,5]; print_r(GetNum( arr=[0,2,3,4,5];printr(GetNum(arr));*/

/*

1.任意不重复五位数 随机取10000个 存入到文件中 每个文件能够存 1000个数字 现在要求 能够快速的找到一数在不在我们的文件里,如果在 在哪个文件
*/

function CreateNum()
{
a r r = r a n g e ( 10000 , 99999 ) ; s h u f f l e ( arr = range(10000, 99999); shuffle( arr=range(10000,99999);shuffle(arr);
a r r = a r r a y s l i c e ( arr = array_slice( arr=arrayslice(arr, 0,10000);
return $arr;

}

/*
@content 把得到的数据写入文件
@params $arr array 要写入文件的内容 排好序的数组
@params $size int 每个文件存储的条数
@return bool true/false 写入成功或者失败

*/

function wfile( a r r , arr, arr,size)
{
t o t a l S i z e = c o u n t ( totalSize = count( totalSize=count(arr);
//首先获得有多少个文件
p a g e = c e i l ( page = ceil( page=ceil(totalSize/$size);
//循环写入文件

for ($i=1; $i <=$page; $i++) { 
    $filename = "demo/$i.txt";
    $str ='';
    for($j=($i-1)*$size;$j<$i*$size && $j<10000;$j++){
        $str .= $arr[$j]."\n";
    }
    file_put_contents($filename, $str);
}

}

function search(KaTeX parse error: Expected '}', got 'EOF' at end of input: num) { if(num<10000 || $num>100000){
return -1;
}
$dir = “./demo”;
a r r = s c a n d i r ( arr = scandir( arr=scandir(dir);
t o t a l = c o u n t ( total = count( total=count(arr)-2;
d a t a = r f i l e ( data = rfile( data=rfile(num,0,$total);

 return $data;

}

function rfile( n u m , num, num,start,$end)
{
m i d = c e i l ( ( mid = ceil(( mid=ceil((start+$end)/2);
f i l e n a m e = &quot; . / d e m o / &quot; . filename = &quot;./demo/&quot;. filename="./demo/".mid.".txt";
s t r = f i l e g e t c o n t e n t s ( str = file_get_contents( str=filegetcontents(filename);
s t r = t r i m ( str = trim( str=trim(str,"\n");
$data = explode("\n", $str);
$min = 0;
m a x = c o u n t ( max = count( max=count(data)-1;
if( d a t a [ data[ data[min]>KaTeX parse error: Expected '}', got 'EOF' at end of input: … return rfile(num, s t a r t , start, start,mid-1);
}elseif( d a t a [ data[ data[max]<KaTeX parse error: Expected '}', got 'EOF' at end of input: … return rfile(num, m i d + 1 , mid+1, mid+1,end);
}else{
if(in_array( n u m , num, num,data)){
return $mid;
}else{
return -2;
}
}
return $data;

}

$arr = CreateNum();
d a t a = Q u i c k S o r t ( data = QuickSort( data=QuickSort(arr);

//echo wfile($data,999);
print_r(search(36948));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值