数组的排序和查找
来源:互联网 发布:linux系统版本对比 编辑:程序博客网 时间:2024/05/01 21:22
数组的排序
这里介绍一些常用的排序方法,排序是一个程序员的基本功
所谓排序就是对一组数据,按照某个顺序排列的过程
排序分2大类:
内部排序
交换式排序法
1,冒泡法
快速体验:
<?php
$arr=array(0,5, -1);
//从小到大排
$temp=0;
for($i=0;$i< count ($arr) -1;$i++) {
for($j=0;$j< count ($arr) -1-$i;$j++) {
if($arr[$j] > $arr[$j+1]) {
$temp=$arr[$j];
$arr[$j] = $arr[$j+1];
$arr[$j+1] =$temp;
}
}
}
print_r ($arr);
?>
扩展:为了更好的使用排序,我们将其封装成一个函数
代码如下:
<?php
//现在我们把冒泡法封装成函数,利于以后使用。
functionbubbleSort($myarr) {
$temp=0;
for($i=0;$i< count ($myarr) -1;$i++) {
for($j=0;$j< count ($myarr) -1-$i;$j++) {
if($myarr[$j] > $myarr[$j+1]) {
$temp=$myarr[$j];
$myarr[$j] = $myarr[$j+1];
$myarr[$j+1] =$temp;
}
}
}
}
$arr=array(0,5, -1);
//从小到大排
//使用函数去排序
bubbleSort ($arr);
print_r ($arr);
?>
结果没有变化???
分析原因:
改进后:
<?php
//现在我们把冒泡法封装成函数,利于以后使用
functionbubbleSort(&$myarr) {
//加了个地址符&
$temp=0;
for($i=0;$i< count ($myarr) -1;$i++) {
for($j=0;$j< count ($myarr) -1-$i;$j++) {
if($myarr[$j] > $myarr[$j+1]) {
$temp=$myarr[$j];
$myarr[$j] = $myarr[$j+1];
$myarr[$j+1] =$temp;
}
}
}
echo"<br/>函数中的myarr数组";
print_r ( $myarr);
}
$arr=array(0,5, -1);
//从小到大排
//使用函数去排序
bubbleSort ($arr);
print_r ($arr);
?>
☞☞☞小结论:
数组默认传递的是值,不是地址
2,选择排序法
案例:
<?php
functionselectSort(&$arr){
$temp=0;
for($i=0;$i< count ($arr) -1;$i++){
//假设$i是最小的数
$minVal=$arr[$i];
//记录我认为的最小数的下标
$minIndex=$i;
for($j=$i+1;$j< count ($arr);$j++){
//说明我们认为的最小值,不是最小
if($minVal>$arr[$j]) {
$minVal=$arr[$j];
$minIndex=$j;
}
}
//最后交换
$temp=$arr[$i];
$arr[$i] = $arr[$minIndex];
$arr[$minIndex] = $temp;
}
}
$arr=array(0,5, -1);
//从小到大排
//使用函数去排序
selectSort ($arr);
print_r ($arr);
?>
3,插入排序法
<?php
//小到大排
functioninsertSort(&$arr){
//先默认下标为0,这个数已经是有序的了
for($i=1;$i< count ($arr);$i++) {
//$insertVal是准备插入的数
$insertVal=$arr[$i];
//准备先和下标为$insertIndex的数比较
$insertIndex=$i-1;
//如果这个条件满足,说明,我们还没有找到适当的位置。
while($insertIndex>=0&&$insertVal<$arr[$insertIndex] ){
//同时把数后移
$arr[$insertIndex+1] =$arr[$insertIndex];
$insertIndex--;
} //插入(这是就给$insertVal找到位置了)
$arr[$insertIndex+1] =$insertVal;
}
}
$arr=array(0,5, -1);
insertSort ($arr);
print_r ($arr);
?>
4,快速排序法(php程序员不做要求)
从效率上看,(效率时间和空间上看)
冒泡法<选择排序法<插入排序法
快速排序法【空间和时间协调】
现在更关心时间问题了,更接近于用空间来换取时间了
外部排序
因为数据量大,必须借助外部文件来完成
扩展:
1,工作2,3年后,可以研究:
基础得扎实(长远来看)
研究linux内核
研究算法
研究网络技术
研究数据库
高级的架构师是没有问题的
2,打出系统的当前时间
date_default_timezone_set('Asia/Shanghai');
$today= date('y-n-d G:i:s');
echo $today;
3,动态创建200000个数
<?php
//动态的创建200000个数据
$arr=array();
for($i=0;$i<20;$i++){
$arr[$i]=rand(0,3000);
//200000*4=800000
echo$arr[$i]."<br/>";
}
?>
4,优化冒泡排序
小小的优化,带来效率的提升
<?php
//现在我们把冒泡法封装成函数,利于以后使用
functionbubbleSort(&$myarr) {
$temp=0;
$flag=false;//默认没有进来
for($i=0;$i< count ($myarr) -1;$i++) {
for($j=0;$j< count ($myarr) -1-$i;$j++) {
if($myarr[$j] > $myarr[$j+1]) {
$temp=$myarr[$j];
$myarr[$j] = $myarr[$j+1];
$myarr[$j+1] =$temp;
$flag=true;
//进来后,就为true了,
}
}
//判断
if(!$flag) {
//已经是有序的
break;
}
$flag=false;
}
echo"<br/>函数中的myarr数组";
print_r ( $myarr);
}
$arr=array(0,5, -1);
//从小到大排
//使用函数去排序
bubbleSort ($arr);
print_r ($arr);
?>
查找
介绍2种
1,顺序查找
对某个数组,按照顺序,一个一个比较,然后找到你想要的数据
案例:
要求从一个数组中查找到一个数,如果找到,则输出该数的下标,若找不到,则输出,查无此数
<?php
functionsearch(&$arr,$findVal) {
$flag=false;
for($i=0;$i< count ($arr);$i++) {
if($findVal==$arr[$i]) {
echo"找到了,下标为$i<br/>";
$flag=true;
//break;
}
}
if(!$flag) {
echo'查询不到';
}
}
$arr=array(2.2,0,4,0);
search ($arr,0);
?>
2,二分查找(必须要掌握的)
所谓二分查找,它有一个重要的前提,该数组本身,已经是一个有序数组,
如果该数组不是有序的,则必须先排序再查找
思想:
<?php
//二分查找
functionbinarySearch(&$arr,$findVal,$leftIndex,$rightIndex) {
//
//当$rightIndex>$leftIndex,说明没有数
if($rightIndex<$leftIndex) {
echo"找不到该数";
return;
}
//找到中间这个数,
$middleIndex= round ( ($rightIndex+$leftIndex) /2);
//如果是大于,则向后面找。
if($findVal>$arr[$middleIndex]) {
binarySearch ( $arr,$findVal,$middleIndex+1,$rightIndex);
} //如果是小于,则向前面找。
else if($findVal<$arr[$middleIndex]) {
binarySearch ( $arr,$findVal,$leftIndex,$middleIndex-1);
} else{
echo"找到这个数,下标是$middleIndex";
}
}
$arr=array(-2,0,4,5);
binarySearch ($arr,5,0, count ($arr) -1);
?>
- 数组的排序和查找
- R类数组的排序和查找
- 数组的冒泡排序和折半查找
- 【Java】数组的排序和查找
- 数组的折半查找和冒泡排序
- 关于数组的排序和查找算法
- 数组合并,排序,和查找
- Java数组排序和查找
- 数组高级(排序和查找)
- 数组的排序及查找
- 数组的排序与查找
- 数组的两种种排序方式和查找方式举例
- 黑马程序员_数组的排序,求最值和查找
- Java学习笔记_6_数组的排序和查找
- java数组中常见的排序和查找
- 旋转数组的最小数字(查找和排序)
- 查找和排序-——旋转数组的最小数字
- 【排序】冒泡排序法and针对数组的普通查找法和二分查找法
- 用bash做个tcp客户端
- 趣味面试题集锦
- 操作系统
- 下面的代码有什么不妥之处
- 虚拟化的概念
- 数组的排序和查找
- 数据中心
- oracle 在线重定义
- 解构SPA模式 ZARA、UNIQLO秘诀
- 教你如何去除Android应用中的广告
- [转]50个c/c++源代码网站
- Socket ServerSocket
- Android关于Loaders的使用
- 软设复习需加强弄懂的要点