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-
len−i;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
>
=
end>=
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
]
>
mid]>
mid]>search){
return BinSearch(
a
r
r
,
arr,
arr,start,
m
i
d
−
1
,
mid-1,
mid−1,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
<
j <
j<len ; KaTeX parse error: Expected '}', got 'EOF' at end of input: … for (k=0;
k
<
k <
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
=
"
.
/
d
e
m
o
/
"
.
filename = "./demo/".
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));