- /**
- * 冒泡排序
- * 思路:每次循环排列出一个最大的数
- */
- public function mao_paoOp(){
- $data = array(5,2,6,4,3,1,9,8,4,5,14,25,41,12,52,32,42);
- $total = count($data);
- //循环控制需要冒的轮数
- for($i=0; $i<$total ; $i++){
- //每轮 冒出的数 比较
- for ($j=$i+1; $j<$total;$j++){
- if($data[$i]>$data[$j]){
- //接收的空变量
- $rem = $data[$i];
- $data[$i] = $data[$j];
- $data[$j] = $rem;
- }
- }
- }
- $this->response($data,2000);
- }
- /**
- * 选择排序
- * 思路:每一趟在n-i+1(i = 1,2,…,n-1)个记录中选择关键字最小的记录作为有序序列中第i个记录,
- * 其中最简单的是简单选择排序,其过程如下:通过n-i次关键字间的比较,
- * 从n-i+1个记录中选择出关键字最小的记录,并各第i个记录交换之。
- */
- public function select_mathOp(){
- $data = array(5,2,6,4,3,1,9,8,4,5,14,25,41,12,52,32,42);
- $total = count($data);
- for ($i=0;$i<$total;$i++){
- //假设最小值位置
- $p = $i;
- //当前需要比较的元数 $i的后面
- for ($j=$i+1;$j<$total;$j++){
- if($data[$p]>$data[$j]){
- //发现有更小的 记录
- $p = $j;
- }
- }
- //发现最小的和当前的位置不一样 对调
- if($p !=$i){
- $tem = $data[$p];
- $data[$p] = $data[$i];
- $data[$i] = $tem;
- }
- }
- $this->response($data,2000);
- }
- /**
- * 插入排序
- * 思路:通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,
- * 通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,
- * 需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间
- */
- public function insert_mathOp(){
- $data = array(5,2,6,4,3,1,9,8,4,5,14,25,41,12,52,32,42);
- $total = count($data);
- for ($i=1;$i<$total;$i++){
- $tmp = $data[$i];
- for ($j=$i-1;$j>=0;$j--){
- if($tmp<$data[$j]){
- $data[$j+1] = $data[$j];
- $data[$j] = $tmp;
- }else{
- break;
- }
- }
- }
- $this->response($data,2000);
- }
- /**
- * 快速排序
- * 思路:先对数组进行分割, 把大的元素数值放到一个临时数组里,
- * 把小的元素数值放到另一个临时数组里(这个分割的点可以是数组中的任意一个元素值,一般用第一个元素,即$array[0]),
- * 然后继续把这两个临时数组重复上面拆分,最后把小的数组元素和大的数组元素合并起来。这里用到了递归的思想。
- */
- public function quick_sort_mathOp(){
- $data = array(5,2,6,4,3,1,9,8,4,5,14,25,41,12,52,32,42);
- $data_tmp = $this->quick_sort($data);
- $this->response($data_tmp,2000);
- }
- /**
- * 使用递归方式
- * @param $data
- * @return array
- */
- public function quick_sort($data){
- $total = count($data);
- //递归的时候 要防止死循环
- if($total<=1){
- return $data;
- }
- $base_num = $data[0];
- $left_data = array(); //小于
- $right_data = array(); //大于
- for ($i=1;$i<$total;$i++){
- if($base_num>$data[$i]){
- $left_data[] = $data[$i];
- }else{
- $right_data[] = $data[$i];
- }
- }
- $left_data = $this->quick_sort($left_data);
- $right_data = $this->quick_sort($right_data);
- $data_tmp = array_merge($left_data,array($base_num),$right_data);
- return $data_tmp;
- }