php用函数进行冒泡

冒泡排序算法原理及实现

冒泡排序算法是一种基本的排序算法,它的原理是通过不断地交换相邻的元素,将较大的元素逐渐“冒泡”到数组末尾。这个过程类似于水中的气泡逐渐上浮的过程,因而得名冒泡排序。

冒泡排序的实现可以使用循环和条件判断结合的方式来完成,下面我们通过PHP代码来演示一下:

```php

function bubbleSort($arr) {

$len = count($arr);

for ($i = 0; $i < $len - 1; $i++) {

for ($j = 0; $j < $len - $i - 1; $j++) {

if ($arr[$j] > $arr[$j + 1]) {

$temp = $arr[$j];

$arr[$j] = $arr[$j + 1];

$arr[$j + 1] = $temp;

}

}

}

return $arr;

}

// 测试

$arr = array(64, 34, 25, 12, 22, 11, 90);

$result = bubbleSort($arr);

echo "排序结果:";

foreach ($result as $val) {

echo $val . " ";

}

```

上述代码定义了一个名为bubbleSort的函数,接收一个待排序的数组作为参数,并返回排序后的数组。函数中使用两层循环来实现冒泡排序的过程。

首先,外层循环控制每一轮的比较,它从数组的首位开始,依次向后移动,每移动一次,就完成了一轮比较。由于一共进行了$n-1$轮比较,所以外层循环的条件为$i<\text{len}-1$。

接下来,内层循环用于比较相邻的元素。每次循环,当前位置`$j`与下一个位置`$j+1`的元素进行比较,如果前一个元素大于后一个元素,就交换它们的位置,同时继续向后移动。内层循环每一轮比较完成后,较大的元素就会“冒泡”到当前轮的最后位置。

综上所述,冒泡排序算法的时间复杂度为$O(n^2)$,适用于小规模的数组排序。

身份证号码校验函数的实现

在实际开发中,经常遇到需要校验身份证号码的场景。身份证号码校验是一项常见的任务,它可以用于验证身份证号码的合法性,防止错误或恶意输入。

身份证号码是一串由数字和X/x组成的字符串,根据国家标准,它的格式规则如下:

1. 身份证号码必须是18位;

2. 前17位是由数字组成的,最后一位可能是X/x;

3. 身份证号码的前两位表示省份;

4. 身份证号码的第3到第10位表示出生年月日;

5. 身份证号码的第11到第14位表示出生地;

6. 身份证号码的第15到第17位表示性别,奇数表示男性,偶数表示女性;

7. 身份证号码的最后一位是校验位,它是根据前面17位的值计算出的。

根据上述规则,我们可以编写一个PHP函数来校验身份证号码的合法性。具体代码如下:

```php

function validateIDCard($idCard) {

if (strlen($idCard) != 18) {

return false;

}

$idCardArr = str_split($idCard);

$factor = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);

$checksum = array(1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2);

$sum = 0;

for ($i = 0; $i < 17; $i++) {

if (!is_numeric($idCardArr[$i])) {

return false;

}

$sum += $idCardArr[$i] * $factor[$i];

}

$mod = $sum % 11;

if (strtoupper($idCardArr[17]) != $checksum[$mod]) {

return false;

}

return true;

}

// 测试

$idCard = "430524199901010015";

if (validateIDCard($idCard)) {

echo "身份证号码合法";

} else {

echo "身份证号码不合法";

}

```

上述代码定义了一个名为validateIDCard的函数,接收一个身份证号码作为参数,并返回一个布尔值,表示身份证号码是否合法。

在函数内部,首先判断身份证号码的长度是否等于18位,如果不是,直接返回false。

接着,使用`str_split`函数将身份证号码转换为一个数组`$idCardArr`,方便后续的处理。

然后,定义两个数组`$factor`和`$checksum`,分别用于存储计算校验位所需的系数和取模结果。这两个数组的含义和计算方式可以参考国家标准。

最后,利用循环和条件判断,计算出身份证号码的校验位,并与输入的校验位进行比较。如果不相等,返回false;否则,返回true。

综上所述,上述函数可以完成身份证号码的合法性校验,并可根据实际情况进行扩展和优化。 如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.ynyuzhu.com/

点赞(34) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿
发表
评论
返回
顶部