php冒泡和选择排序

来源:互联网 发布:左飞 算法之美 编辑:程序博客网 时间:2024/06/06 10:07

冒泡排序

$arr=array('11','1','12','56','596','8','3');for ($i=0; $i <count($arr)-1 ; $i++) {  for ($j=0; $j < count($arr)-1-$i; $j++) {   $arr1=array();  if ($arr[$j]>$arr[$j+1]) {   $arr1=$arr[$j];   $arr[$j]=$arr[$j+1];   $arr[$j+1]=$arr1;  } }}print_r($arr);

选择排序

$arr=['1','9','5','56','8'];$arr_length=count($arr);for($i=0;$i<($arr_length-1);$i++){ $minval=$arr[$i]; for ($j=$i+1; $j <($arr_length) ; $j++) {   if($arr[$j]<$minval){   $minval=$arr[$j];   $tmp_arr=array();   $tmp_arr=$arr[$i];   $arr[$i]=$arr[$j];   $arr[$j]=$tmp_arr;  } }}print_r($arr);

1、冒泡法原理:

 首先将第一个记录的关键字和第二个记录的关键字进行比较,若为逆序,则将两个记录交换,然后比较批二个记录和第三个记录的关键字,依次类推,直至第n-1个元素和第n个元素进行过比较为止。以上为一次冒泡排序,礤结果是使得关键字最大的记录被安置到最后一个记录的位置上。然后进行第二真趟冒泡排序,对前n-1个记录进行同样操作,其结果是使关键字次大的记录安置到第n-1人的位置上,如此类似

“`
arr=array(3,5,1,0,2);for(i=0;$i

 * 理解:3,5,-1,0,2//从第一个数开始往后比较,如果比后面的数大则与后面的数调位置//第一次,3小于5,那么不变//第二次,5大于-1,那么变成3,-1,5,0,2//第三次,5大于03,-1,0,5,2//第四次,5大于23,-1,0,2,5至此完成一次内循环,此时最后一个数完成排序,下次将不参与3,-1,0,2,5第二次外循环开始 第一次:3大于-1-13025第二次:3大于0-10325第三次:3大于2-10235至此完成后面两位数的排序了,接下来类推-10235二、选择排序法说明:先假设第一个数就是最小的数,然后将后面的数依次与它比较,如果假设的数不是最小的数,就将它与后面的最小的数调换位置 *## 2、简单选择排序原理     每一趟在n-i+1(i = 1,2,…,n-1)个记录中选择关键字最小的记录作为有序序列中第i个记录,其中最简单的是简单选择排序,其过程如下:通过n-i次关键字间的比较,从n-i+1个记录中选择出关键字最小的记录,并各第i个记录交换之。
## 二、选择排序法说明:先假设第一个数就是最小的数,然后将后面的数依次与它比较,如果假设的数不是最小的数,就将它与后面的最小的数调换位置复制代码 代码如下:

arr=array(2,1,1,3,0);for(i=0;$i

理解:2,1,-1,3,0//先假设第一个数2为最小值,它后面的数依次与2做比较,寻找到最小的那个数过程:1小于2,那么minval=1-1小于1,那么minval=-13大于-1,不变0大于-1,不变那么现在就找到了该数组中最小的数了为-1将-1与2调换位置就完成第一个数的排序了那么现在数组变成-11230现在第一个数-1已经为有序,所以不参与比较了,往后面继续现在假设minval=12大于1,不变3大于1,不变0小于1,那么minval=0现在一次循环完成,调换0与1的位置完成第二个数的排序那么现在数组变成-10231//后面的推法与上面相同。。。*//*## 三、插入排序法说明:先假设一个数组中的第一个数为单独的有序数组,再将后面的一个数与它【这里随它I的增长,就变成它们了】做比较,如果后面的数比假设的数还小,则将小的那个数后移,最后将那个数移到最前面 代码如下:

arr=array(2,1,1,3,0);for(i=1;$i

原创粉丝点击