很久之前因为PHP算法和C语言算出的结果不一样,当时写了两个扩展忘记怎么弄的了。
先记录一下找一下资料后续补充完整
使用C语言编写方法
在编译成.so文件
// 最后需要设置PHP.ini扩展位置
extension=/../crc16_data.so
extension=/../helloworld.so
很久之前因为PHP算法和C语言算出的结果不一样,当时写了两个扩展忘记怎么弄的了。
先记录一下找一下资料后续补充完整
使用C语言编写方法
在编译成.so文件
// 最后需要设置PHP.ini扩展位置
extension=/../crc16_data.so
extension=/../helloworld.so
实 习 >> 入门 >> 了解
知道此语言的编程语法的使用和特点,可读懂及配合参与开发
一年到三年 >> 初级 >> 熟悉
使用该编程语言开发过小型的项目
三年到五年 >> 中级 >> 熟练
使用该编程语言开发很多项目或大型项目,并能够运用于心、掌握部分算法以及能够处理各种的问题和bug
五年到十年 >> 高级 >> 精通
研究过相关底层,可以独立开发框架及各内插件SDK,有丰富的大型项目经验以及能解决各种疑难杂症
无 限 == 顶级 == 大神
参与该编程语言开发设计
你满级了吗( ^ _ ^ )
与大家共勉之!
■第一句话,结交“两个朋友”:一个是图书馆,一个是运动场。到运动场锻炼身体, 强健体魄。到图书馆博览群书,不断的“充电”、“蓄电”、“放电”。
■第二句话,培养“两种功夫”:一个是本分,一个是本事。做人靠本分, 做事靠本事。靠“两本”起家靠得住。
■第三句话,乐于吃“两样东西”:一个是吃亏,一个是吃苦。做人不怕吃亏, 做事不怕吃苦。吃亏是福,吃苦是福。
■第四句话,具备“两种力量”:一种是思想的力量,一种是利剑的力量。思想的力量往往战胜利剑的力量,这是拿破仑的名言。一个人的思想走多远,他就有可能走多远。
■第五句话,追求“两个一致”:一个是兴趣与事业一致,一个是爱情与婚姻一致。兴趣与事业一致,就能使你的潜力最大限度地得以发挥。恩格斯说,婚姻要以爱情为基础。没有爱情的婚姻是不道德的婚姻。也不会是牢固的婚姻。
■第六句话,插上“两个翅膀”:一个叫理想,一个叫毅力。如果一个人有了这“两个翅膀”,他就能飞得高,飞得远。
■第七句话,构建“两个支柱”:一个是科学,一个是人文。
■第八句话,配备两个“保健医生”:一个叫运动,一个叫乐观。运动使你生理健康,乐观使你心理健康。日行万步路,夜读十页书。
■第九句话,记住“两个秘诀”:健康的秘诀在早上,成功的秘诀在晚上。爱因斯坦说过:人的差异产生于业余时间。业余时间能成就一个人,也能毁灭一个人。
■第十句话,追求“两个极致”:一个是把自身的潜力发挥到极致,一个是把自己的寿命健康延长到极致。
——精辟!
与大家共勉之!
水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。(例如:1^3 + 3^3+ 5^3 = 153)这篇文章主要介绍了php实现水仙花数的4个示例分享,需要的朋友可以参考下:
示例1:
for($q=1; $q<=9; $q++){
for($w=0; $w<=9; $w++){
for($e=0; $e<=9; $e++){
if($q* $q *$q + $w* $w* $w + $e* $e* $e == 100* $q + 10* $w + $e){
echo "$q $w $e "."<p>";
}
}
}
}
示例2:
function cube($n)
{
return $n * $n * $n;
}
function is_narcissistic ( $n )
{
$hundreds = floor( $n / 100); //分解出百位
$tens = floor( $n / 10 ) % 10; //分解出十位
$ones = floor( $n % 10 ); //分解出个位
return (bool)(cube($hundreds)+cube($tens)+cube($ones) == $n);
}
for ($i = 100; $i < 1000; ++ $i )
{
if ( is_narcissistic($i) )
echo $i."\n";
}
计算数组乘积,array_product()
排序有内部排序和外部排序之分,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。我们这里说的八大排序算法均为内部排序。
1.直接插入算法
// 第一种
function insert_sort($arr){
for ($i = 0; $i < count($arr)-1; $i++){
for($j = $i+1; $j > 0; $j--){
if($arr[$j] > $arr[$j-1]){
$temp = $arr[$j];
$arr[$j] = $arr[$j-1];
$arr[$j-1] = $temp;
}
}
}
return $arr;
}
$insert_sort = insert_sort([19, 22, 20, 12, 13, 15, 25, 26]);
var_dump($insert_sort);
// 第二种
function insert_sort($arr){
for ($i = 0; $i < count($arr)-1; $i++){
$j = $i + 1;
while($j > 0){
if($arr[$j] > $arr[$j-1]){
$temp = $arr[$j];
$arr[$j] = $arr[$j-1];
$arr[$j-1] = $temp;
}
$j--;
}
}
return $arr;
}
// 第三种
function insertSort($arr)
{
$len=count($arr);
for($i=1; $i<$len; $i++) {
// 获得当前需要比较的元素值。
$tmp = $arr[$i];
// 内层循环控制 比较 并 插入
for($j=$i-1; $j>=0; $j--) {
// $arr[$i]; 需要插入的元素; $arr[$j]; 需要比较的元素
if($tmp < $arr[$j]) {
// 发现插入的元素要小,交换位置
// 将后边的元素与前面的元素互换
$arr[$j+1] = $arr[$j];
// 将前面的数设置为 当前需要交换的数
$arr[$j] = $tmp;
} else {
// 如果碰到不需要移动的元素
// 由于是已经排序好是数组,则前面的就不需要再次比较了。
break;
}
}
}
// 将这个元素 插入到已经排序好的序列内。
return $arr;
}
2.希尔排序
3.直接选择排序
function selectSort($arr)
{
$len=count($arr);
for ($i = 0; $i < $len-1; $i++){
// 先假设最小的值的位置
$p = $i;
for ($j = $i+1; $j < $len; $j++){
// $arr[$p]是当前已知的最小值
if ($arr[$p] > $arr[$j]){
// 发现更小的记录一下次使用
$p = $j;
}
}
if ($p != $i){
$tmp = $arr[$p];
$arr[$p] = $arr[$i];
$arr[$i] = $tmp;
}
}
return $arr;
}
4.堆排序
5.冒泡排序法的基本思想是:对待排序记录关键字从后往前(逆序)进行多遍扫描,当发现相邻两个关键字的次序与排序要求的规则不符时,就将这两个记录进行交换。这样,关键字较小的记录将逐渐从后面向前面移动,就象气泡在水中向上浮一样,所以该算法也称为气泡排序法。
// 冒泡排序
function bubbleSort($arr)
{
$len = count($arr);
// 该层循环控制 需要冒泡的轮数
for ($i=1; $i<$len; $i++) {
// 该层循环用来控制每轮 冒出一个数 需要比较的次数
for ($j=0; $j<$len-$i; $j++) {
if($arr[$j] > $arr[$j+1]) {
$tmp = $arr[$j+1]; // 声明一个临时变量
$arr[$j+1] = $arr[$j];
$arr[$j] = $tmp;
}
}
}
return $arr;
}
6.快速排序算法
function quickSort($arr)
{
if (!is_array($arr)) return false;
$len = count($arr);
if ($len <= 1) return $arr;
$a = $b = array();
for ($i = 1; $i < $len; $i++){
if ($arr[$i] < $arr[0]){
$a[] = $arr[$i];
}else{
$b[] = $arr[$i];
}
}
$a = quickSort($a);
$b = quickSort($b);
return array_merge($a, array($arr[0]), $b);
}
7.归并排序算法【注意:数组按值传输】
function merge_sort(&$A, $p, $r)
{
if($p < $r){
$q = floor(($p + $r)/2);
merge_sort($A, $p, $q);
merge_sort($A, $q+1, $r);
merge($A, $p, $q, $r);
}
}
function merge(&$A, $p, $q, $r)
{
// 哨兵牌法
$n1 = $q - $p + 1;
$n2 = $r - $q;
for($i = 0; $i < $n1; $i++){
$L[$i] = $A[$p+$i];
}
for($j = 0; $j < $n2; $j++){
$R[$j] = $A[$q+$j+1];
}
// 防止越界(哨兵)
$L[$n1] = $R[$n2] = PHP_INT_MAX;
$i = $j = 0;
for($k = $p; $k <= $r; $k++){
if($L[$i] <= $R[$j]){
$A[$k] = $L[$i];
$i++;
}else{
$A[$k] = $R[$j];
$j++;
}
}
}
8.基数排序算法