這篇文章運(yùn)用簡單易懂的例子給大家介紹PHP中選擇排序的應(yīng)用,代碼非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

成都創(chuàng)新互聯(lián)是一家以重慶網(wǎng)站建設(shè)公司、網(wǎng)頁設(shè)計(jì)、品牌設(shè)計(jì)、軟件運(yùn)維、seo優(yōu)化、小程序App開發(fā)等移動開發(fā)為一體互聯(lián)網(wǎng)公司。已累計(jì)為成都社區(qū)文化墻等眾行業(yè)中小客戶提供優(yōu)質(zhì)的互聯(lián)網(wǎng)建站和軟件開發(fā)服務(wù)。
● 選擇排序也是內(nèi)部排序
● 排序思想:
第一次先隨便選擇一個數(shù),就是在要排序的數(shù)組中選擇一個元素和數(shù)組的其它元素比較。然后比較交換位置得到最小值或者最大值,然后再次在剩下的數(shù)組中,選擇一個數(shù)和數(shù)組剩下的元素比較,最后得到第二個最小或最大的元素。依次類推
● 示意圖:
選擇排序一共有數(shù)組大小 - 1 輪排序;每一輪排序又是一個循環(huán);先假定當(dāng)前的這個數(shù)組就是最小數(shù),然后和后面的元素依次比較,如果發(fā)現(xiàn)有比當(dāng)前數(shù)更小的數(shù),就重新確定最小數(shù),并得到下標(biāo),當(dāng)遍歷到數(shù)組的最后時,就得到本輪最小數(shù)和下標(biāo),交換
1. 假設(shè)有一個待排序的數(shù)組 [3, 1, 15, 5, 20]
2. 隨機(jī)選擇一個元素,假設(shè)第一個就是最小的元素,拿 3 和數(shù)組剩下的元素比較,第一輪排序后得到最小元素 1
<?php
$arr = [3, 1, 15, 5, 20];
$count = count($arr);
//假設(shè)最小的元素就是第一個元素
$minIndex = 0;
$min = $arr[0];
for ($j = $minIndex + 1; $j < $count; $j++) {
if ($min > $arr[$j]) { //假定的最小值大于后面的值,重置最小值
$min = $arr[$j];
$minIndex = $j;
}
}
$arr[$minIndex] = $arr[0];
$arr[0] = $min;3. 再次選擇一個假定最小值,與后面的元素一次比較,得到第二個最小值
<?php
$arr = [1, 3, 15, 5, 20];
$count = count($arr);
//假設(shè)最小的元素就是第二個元素
$minIndex = 1;//假設(shè)的最小元素的下表
$min = $arr[1];//假定最小元素的值
for ($j = $minIndex + 1; $j < $count; $j++) {
if ($min > $arr[$j]) { //假定的最小值大于后面的值,重置最小值
$min = $arr[$j];
$minIndex = $j;
}
}
if ($minIndex != 1) {
$arr[$minIndex] = $arr[1];//假定的最小元素不是最小元素,那么把后面的最小元素和假定的最小元素做交換
$arr[1] = $min;//元素下標(biāo)交換
}4. 以此類推,就可以使用雙重 for 循環(huán),得到選擇排序的算法如下:
public static function sortSelect(array $arr) :array
{
if (!is_array($arr)) {
return ['message' => '$arr不是一個數(shù)組'];
}
$count = count($arr);
if ($count <= 1) {
return $arr;
}
for ($i = 0; $i < $count; $i++) {
$minIndex = $i;
$min = $arr[$i];
for ($j = $i + 1; $j < $count; $j++) {
if ($min > $arr[$j]) {//選擇的假定最小元素大于后面的元素
$min = $arr[$j];//把后面的最小元素賦值給假定的最小元素
$minIndex = $j;//把后面最小元素的坐標(biāo)賦值給假定的最小元素
}
}
if ($minIndex != $i) {//如果在這個位置,一開始的假定最小元素的坐標(biāo)被替換了,說明假定最小元素不是最小元素,那么發(fā)生交換
$arr[$minIndex] = $arr[$i];//交換最小元素,把最小元素和假定元素做交換
$arr[$i] = $min;
}
}
return $arr;
}● 完整代碼如下:
<?php
class SelectSort
{
public static function select(array $arr):array
{
$count = count($arr);
//假設(shè)最小的元素就是第二個元素
$minIndex = 0;//假設(shè)的最小元素的下表
$min = $arr[0];//假定最小元素的值
for ($j = $minIndex + 1; $j < $count; $j++) {
if ($min > $arr[$j]) { //假定的最小值大于后面的值,重置最小值
$min = $arr[$j];
$minIndex = $j;
}
}
if ($minIndex != 0) {
$arr[$minIndex] = $arr[0];//假定的最小元素不是最小元素,那么把后面的最小元素和假定的最小元素做交換
$arr[0] = $min;//元素下標(biāo)交換
}
var_dump($arr);
$minIndex = 1;//假設(shè)的最小元素的下表
$min = $arr[1];//假定最小元素的值
for ($j = $minIndex + 1; $j < $count; $j++) {
if ($min > $arr[$j]) { //假定的最小值大于后面的值,重置最小值
$min = $arr[$j];
$minIndex = $j;
}
}
if ($minIndex != 1) {
$arr[$minIndex] = $arr[1];//假定的最小元素不是最小元素,那么把后面的最小元素和假定的最小元素做交換
$arr[1] = $min;//元素下標(biāo)交換
}
var_dump($arr);
$minIndex = 2;//假設(shè)的最小元素的下表
$min = $arr[2];//假定最小元素的值
for ($j = $minIndex + 1; $j < $count; $j++) {
if ($min > $arr[$j]) { //假定的最小值大于后面的值,重置最小值
$min = $arr[$j];
$minIndex = $j;
}
}
if ($minIndex != 2) {
$arr[$minIndex] = $arr[2];//假定的最小元素不是最小元素,那么把后面的最小元素和假定的最小元素做交換
$arr[2] = $min;//元素下標(biāo)交換
}
var_dump($arr);
return $arr;
}
public static function sortSelect(array $arr) :array
{
if (!is_array($arr)) {
return ['message' => '$arr不是一個數(shù)組'];
}
$count = count($arr);
if ($count <= 1) {
return $arr;
}
for ($i = 0; $i < $count - 1; $i++) {
$minIndex = $i;
$min = $arr[$i];
for ($j = $i + 1; $j < $count; $j++) {
if ($min > $arr[$j]) {//選擇的假定最小元素大于后面的元素
$min = $arr[$j];//把后面的最小元素賦值給假定的最小元素
$minIndex = $j;//把后面最小元素的坐標(biāo)賦值給假定的最小元素
}
}
if ($minIndex != $i) {//如果在這個位置,一開始的假定最小元素的坐標(biāo)被替換了,說明假定最小元素不是最小元素,那么發(fā)生交換
$arr[$minIndex] = $arr[$i];//交換最小元素,把最小元素和假定元素做交換
$arr[$i] = $min;
}
}
return $arr;
}
}
$arr = [3, 1, 15, 5, 20];
var_dump(SelectSort::sortSelect($arr));以上就是PHP中選擇排序的應(yīng)用詳細(xì)內(nèi)容,看完之后是否有所收獲呢?如果想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊,感謝各位的閱讀。
網(wǎng)站標(biāo)題:PHP中選擇排序的應(yīng)用
鏈接分享:http://chinadenli.net/article38/jhgipp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、網(wǎng)站維護(hù)、網(wǎng)站排名、軟件開發(fā)、小程序開發(fā)、動態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)