/**
* 冒泡排序
* 思路:每次循環排列出一個最大的數
*/
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;
}