當前位置:成語大全網 - 書法字典 - php中幾種排序算法的詳細說明

php中幾種排序算法的詳細說明

四種排序算法的PHP實現:

1)?插入排序(插入?排序的基本思想是:?

根據關鍵字大小,壹次將壹條要排序的記錄插入先前排序的子文件中的適當位置,直到插入所有記錄。

2)?選擇排序(選擇?排序的基本思想是:?

每次都從要排序的記錄中選擇關鍵字最小的記錄,並將順序放在排序子文件的末尾,直到所有記錄都排序完畢。

3)?冒泡排序的基本思路是:?

兩兩比較要排序的記錄的關鍵字,當發現兩個記錄順序相反時交換關鍵字,直到沒有順序相反的記錄為止。

4)?快速排序和冒泡排序壹樣,是交換排序的壹種應用。所以基本思想和上面的冒泡排序壹樣。

1.?Sort.php文件如下:

& lt?服務器端編程語言(Professional Hypertext Preprocessor的縮寫)

上課?排序?{

私人的?$arr=?array();?

私人的?$sort=?插入‘;

私人的?$馬克筆?=?_ sort‘;

私人的?$debug?=?真實;

/**

*?構造器

*

*?@paramarray例如:

$config?=?數組?(

什麽?= & gt?array(22,3,41,18)?,?//要排序的數組值

排序?= & gt?插入‘,?//可能值:?插入,?選擇,?泡泡?快的

調試?= & gt?真的嗎?//可能值:?真的嗎?錯誤的

)

*/

公共的?功能?構造($config?=?array())?{

如果?(?計數(配置)?& gt?0)?{

$ this-& gt;_ init($ config);

}

}

/**

*?獲取排序結果

*/

公共的?功能?顯示()?{

回歸?$ this-& gt;arr

}

/**

*?初始化

*

*?@paramarray

*?@回歸?彎曲件

*/

私人的?功能?_ init($ config?=?array())?{

//參數判斷

如果?(?!is _ array($ config)?還是?計數(配置)?==?0)?{

如果?($ this-& gt;調試?===?真的)?{

$ this-& gt;_ log(“sort _ init _ param _ invaild“);

}

回歸?假的;

}

//初始化成員變量

foreach?($config?作為什麽?$key?= & gt?$val)?{

如果?(?isset($ this-& gt;$key))?{

$ this-& gt;$key?=?$ val

}

}

//調用對應的成員方法完成排序。

$method?=?$ this-& gt;排序?。?$ this-& gt;馬克筆;

如果?(?!?method _ exists($ this,?$method))?{

如果?($ this-& gt;調試?===?真的)?{

$ this-& gt;_ log(“sort _ method _ invaild“);

}

回歸?假的;

}

如果?(?假的?===?($ this-& gt;arr?=?$ this-& gt;$ method($ this-& gt;arr))

回歸?假的;

回歸?真實;

}

/**

*?插入排序

*?

*?@paramarray

*?@回歸?彎曲件

*/

私人的?功能?insert _ sort($ arr)?{

//參數判斷

如果?(?!?is _ array($ arr)?還是?計數(arr)?==?0)?{

如果?($ this-& gt;調試?===?真的)?{

$ this-& gt;_ log(“sort _ array(insert)_ invaild“);

}

回歸?假的;

}

//具體實現

$計數?=?count(arr);

為了什麽?($i?=?1;?$i?& lt?$ count?$i++)?{

$tmp?=?$ arr【$ I】;

對於(j?=?$ I-1;?$j?& gt=?0;?$j -)?{?

if($ arr【$ j】?& gt?$tmp)?{

$ arr【$ j+1】?=?$ arr【$ j】;

$ arr【$ j】?=?$ tmp

}

}

}

回歸?$ arr

}

/**

*?選擇排序法

*?

*?@paramarray

*?@回歸?彎曲件

*/

私人的?功能?select _ sort($ arr)?{

//參數判斷

如果?(?!?is _ array($ arr)?還是?計數(arr)?==?0)?{

如果?($ this-& gt;調試?===?真的)?{

$ this-& gt;_ log(“sort _ array(select)_ invaild“);

}

回歸?假的;

}

//具體實現

$計數?=?count(arr);

為了什麽?($i?=?0;?$i?& lt?$ count-1;?$i++)?{

$min?=?$ I;

為了什麽?($j?=?$ I+1;?$j?& lt?$ count?$j++)?{

如果?($ arr【$ min】?& gt?$ arr【$ j】)?$min?=?$ j;

}

如果?($min?!=?$i)?{

$tmp?=?$ arr【$ min】;

$ arr【$ min】?=?$ arr【$ I】;

$ arr【$ I】?=?$ tmp

}

}

回歸?$ arr

}

/**

*?冒泡排序

*?

*?@paramarray

*?@回歸?彎曲件

*/

私人的?功能?bubble _ sort($ arr)?{

//參數判斷

如果?(?!?is _ array($ arr)?還是?計數(arr)?==?0)?{

如果?($ this-& gt;調試?===?真的)?{

$ this-& gt;_ log(“sort _ array(bubble)_ invaild“);

}

回歸?假的;

}

//具體實現

$計數?=?count(arr);

為了什麽?($i?=?0;?$i?& lt?$ count?$i++)?{

為了什麽?($j?=?$ count-1;?$j?& gt?$ I;?$j -)?{

如果?($ arr【$ j】?& lt?$ arr【$ j-1】)?{

$tmp?=?$ arr【$ j】;

$ arr【$ j】?=?$ arr【$ j-1】;

$ arr【$ j-1】?=?$ tmp

}

}

}

回歸?$ arr

}

/**

*?快速排序

*?@by?www.5wx.org

*?@paramarray

*?@回歸?彎曲件

*/

私人的?功能?quick _ sort(arr)?{

//具體實現

如果?(計數(arr)?& lt=?1)?回歸?$ arr?

$key?=?$ arr【0】;

$left_arr?=?array();

$right_arr?=?array();

為了什麽?($i?=?1;?$i?& lt?count(arr);?$ i++){

如果?($ arr【$ I】?& lt=?$key)

$left_arr【】?=?$ arr【$ I】;

其他

$right_arr【】?=?$ arr【$ I】;

}

$left_arr?=?$ this-& gt;quick _ sort($ left _ arr);

$right_arr?=?$ this-& gt;quick _ sort($ right _ arr);?

回歸?數組_合並($left_arr,?數組($key)?$ right _ arr);

}

/**

*?航海日誌記錄

*/

私人的?功能?_ log(msg)?{

$msg?=?日期【’?。?日期(‘Y-m-d?h:I:s’)?。?']?'?。?$msg?。?\ n‘;

回歸?@ file _ put _ contents(‘sort _ err . log‘,?$msg,?FILE _ APPEND);

}

}

/*結束?的?文件?sort.php*/

/*位置?htdocs/sort.php?*/

2.?sort_demo.php文件如下:

& lt?服務器端編程語言(Professional Hypertext Preprocessor的縮寫)

require _ once(‘sort . PHP‘);

$config?=?數組?(

什麽?= & gt?數組(23,?22,?41,?18,?20,?12,?200303,2200,1192)?,

//要排序的數組值

排序?= & gt?選擇‘,

//可能值:?插入,?選擇,?泡泡?快的

調試?= & gt?真實的

//可能值:?真的嗎?錯誤的

);

$sort?=?新的?sort(config);

//var _ dump($ config【‘arr‘】);

var _ dump($ sort-& gt;display());

/*結束?的?php*/