8種php基本排序實現方法

2021-08-04 20:44:52 字數 4373 閱讀 6865

許多人都說演算法是程式的核心,演算法的好壞決定了程式的質量。因此對於基本的排序演算法還是應該掌握的,它是程式開發的必備工具。這裡介紹氣泡排序,插入排序,選擇排序,快速排序等等演算法,分析一下演算法的思路。

1. 氣泡排序

思路分析:在要排序的一組數中,對當前還未排好的序列,從前往後對相鄰的兩個數依次進行比較和調整,讓較大的數往下沉,較小的往上冒。即,每當兩相鄰的數比較後發現它們的排序與排序要求相反時,就將它們互換。

**實現:

/**

* 氣泡排序

* @param array $arr

* @return array

*/function

bubblesort

($arr)}

}return

$arr

;}

2.選擇排序

思路分析:在要排序的一組數中,選出最小的乙個數與第乙個位置的數交換。然後在剩下的數當中再找最小的與第二個位置的數交換,如此迴圈到倒數第二個數和最後乙個數比較為止。

**實現:

/**

* 選擇法排序

* @param array $arr

* @return array

*/function

choicesort

($arr)}

// 把當前值放到算好的位置

$arr

[$ipos]=

$arr[$i

];// 把當前值換成算好的值

$arr[$i

]=$itemp;}

return

$arr

;}

3.插入排序

思路分析:在要排序的一組數中,假設前面的數已經是排好順序的,現在要把第n個數插到前面的有序數中,使得這n個數也是排好順序的。如此反覆迴圈,直到全部排好順序。

**實現:

/**

* 插入法排序

* @param array $arr

* @return array

*/function

insertsort

($arr

)$arr

[$ipos+1

]=$itemp;}

return

$arr

;}

4.快速排序

思路分析:選擇乙個基準元素,通常選擇第乙個元素或者最後乙個元素。通過一趟掃瞄,將待排序列分成兩部分,一部分比基準元素小,一部分大於等於基準元素。此時基準元素在其排好序後的正確位置,然後再用同樣的方法遞迴地排序劃分的兩部分。

**實現:

/**

* 快速排序

* @param array $arr

* @return array

*/function

quicksort

($arr

)else

}// 如果左索引有值 則對左索引排序if(

$l>1)

// 排序後的陣列

$new_arr

=$left

;// 將當前陣列第乙個放到最後

$new_arr

=$arr[0

];// 如果又索引有值 則對右索引排序if(

$r>1)

// 根據右索引的長度再次增加資料

for($i=

0;$i<$r;

$i++

)return

$new_arr;}

//快速排序

function

quicksort

($arr

)$left

=$right

=array()

;//迴圈比較

for($i=

1;$i<

$length;$i

++)else

}// 遞迴排序劃分好的2邊

$left

=quicksort

($left);

$right

=quicksort

($right);

//合併排序後的資料

return

array_merge

($left

,array

($arr[0

]),$right);

}

5.希爾排序

思路分析:將陣列按指定步長分隔成若干子串行,然後分別對子序列進行排序(在這是直接)

**實現:

/**

* 希爾排序

* @param array $arr

* @return array

*/function

shellsort

($arr)}

}$k=floor($k

/2);

}return

$arr

;}

6.堆排序

思路分析:調整子堆的為大根堆的過程

**實現:

/**

* 堆排序

* @param array &$arr 陣列

* @param int $s 子堆的根的位置

* @param int $m 堆最後乙個元素位置

* @return array

*/function

heapadjust(&

$arr,$s

,$m)if

($tmp

>=

$arr[$j

])$arr[$s

]=$arr[$j

];$s=

$j;}$arr[$s

]=$tmp;}

/** * 堆排序

* @param array $arr 陣列

* @return array

*/function

heapsort

($arr

)// 依次把根節點調換至最後乙個位置,再次調整堆為大根堆,找到次最大值,

// 依次類推得到乙個有序陣列

for($n=

$len-1

;$n>0;

$n--

)return

$arr

;}

7.歸併排序

思路分析:這裡實現的是兩路歸併(分別將有序的arr

1[s.

.m]、

arr1[s..m]、

arr1[s

..m]

、arr2[m+1…n]歸併為有序的$arr2[s…n])

**實現:

/**

* 歸併排序

* @param array &$arr1

* @param array &$arr2

* @param int $s

* @param int $m

* @param int $n

*/function

merge(&

$arr1,&

$arr2,$s

,$m,$n

)else}if

($i<=$m)

}elseif(

$j<=$n)

}}/** * 遞迴形式的兩路歸併

* @param array &$arr1

* @param array &$arr2

* @param int $s

* @param int $t

*/function

msort(&

$arr1,&

$arr2,$s

,$t)else

}/**

* 對一位陣列$arr[0..n-1]中的元素進行兩路歸併

* @param array $arr

* @return array

*/function

mergesort

($arr

)

8.交換法排序

**實現:

/**

* 交換法排序

* @param array $arr

* @return array

*/function

swapsort

($arr)}

}return

$arr

;}

7種php基本排序實現方法

本文總結了一下常用的7種排序方法,並用php語言實現。1 直接插入排序 直接插入排序,插入排序的思想是 當前插入位置之前的元素有序,若插入當前位置的元素比有序元素最後乙個元素大,則什麼也pqbkgkiqpn不做,否則在有序序列中找到插入的位置,並插入 function insertsort arr ...

PHP實現四種基本排序演算法

許多人都說演算法是程式的核心,演算法的好壞決定了程式的質量。作為乙個初級phper,雖然很少接觸到演算法方面的東西。但是對於基本的排序演算法還是應該掌握的,它是程式開發的必備工具。這裡介紹氣泡排序,插入排序,選擇排序,快速排序四種基本演算法,分析一下演算法的思路。許多人都說演算法是程式的核心,演算法...

PHP實現四種基本排序演算法

前提 分別用氣泡排序法,快速排序法,選擇排序法,插入排序法將下面陣列中的值按照從小到大的順序進行排序。arr 1,43,54,62,21,66,32,78,36,76,39 思路分析 在要排序的一組數中,對當前還未排好的序列,從前往後對相鄰的兩個數依次進行比較和調整,讓較大的數往下沉,較小的往上冒。...