排序算法
Posted shangfz
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序算法相关的知识,希望对你有一定的参考价值。
/* * @param 冒泡排序 * 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。 * 走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。 * */ function BubbleSort($arr) $len = count($arr); //设置一个空数组 用来接收冒出来的泡 //该层循环控制 需要冒泡的轮数 for ($i = 1; $i < $len; $i++) $flag = false; //本趟排序开始前,交换标志应为假 //该层循环用来控制每轮 冒出一个数 需要比较的次数 for ($k = 0; $k < $len - $i; $k++) //从小到大排序 if ($arr[$k] > $arr[$k + 1]) $tmp = $arr[$k + 1]; $arr[$k + 1] = $arr[$k]; $arr[$k] = $tmp; $flag = true; if(!$flag) return $arr;
/* * @param 选择排序法 * 每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 * 选择排序是不稳定的排序方法(比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面) * */ function selectSort($array) $temp = 0; for($i = 0;$i < count($array) - 1;$i++) $minVal = $array[$i]; //假设$i就是最小值 $minValIndex = $i; for($j = $i+1;$j < count($array);$j++) if($minVal > $array[$j]) //从小到大排列 $minVal = $array[$j]; //找最小值 $minValIndex = $j; $temp = $array[$i]; $array[$i] = $array[$minValIndex]; $array[$minValIndex] = $temp;
/* * 插入排序法 * 每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。 * 算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。 * */ function insertSort($array) //从小到大排列 //先默认$array[0],已经有序,是有序表 for($i = 1;$i < count($array);$i++) $insertVal = $array[$i]; //$insertVal是准备插入的数 $insertIndex = $i - 1; //有序表中准备比较的数的下标 while($insertIndex >= 0 && $insertVal < $array[$insertIndex]) $array[$insertIndex + 1] = $array[$insertIndex]; //将数组往后挪 $insertIndex--; //将下标往前挪,准备与前一个进行比较 if($insertIndex + 1 !== $i) $array[$insertIndex + 1] = $insertVal;
以上是关于排序算法的主要内容,如果未能解决你的问题,请参考以下文章