重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
注:為方便描述,下面的排序全為正序(從小到大排序)
成都創新互聯服務項目包括天心網站建設、天心網站制作、天心網頁制作以及天心網絡營銷策劃等。多年來,我們專注于互聯網行業,利用自身積累的技術優勢、行業經驗、深度合作伙伴關系等,向廣大中小型企業、政府機構等提供互聯網行業的解決方案,天心網站推廣取得了明顯的社會效益與經濟效益。目前,我們服務的客戶以成都為中心已經輻射到天心省份的部分城市,未來相信會繼續擴大服務區域并繼續獲得客戶的支持與信任!
假設有一個數組[a,b,c,d]
冒泡排序依次比較相鄰的兩個元素,如果前面的元素大于后面的元素,則兩元素交換位置;否則,位置不變。具體步驟:
1,比較a,b這兩個元素,如果ab,則交換位置,數組變為:[b,a,c,d]
2,比較a,c這兩個元素,如果ac,則位置不變,數組變為:[b,a,c,d]
3,比較c,d這兩個元素,如果cd,則交換位置,數組變為:[b,a,d,c]
完成第一輪比較后,可以發現最大的數c已經排(冒)在最后面了,接著再進行第二輪比較,但第二輪比較不必比較最后一個元素了,因為最后一個元素已經是最大的了。
第二輪比較結束后,第二大的數也會冒到倒數第二的位置。
依次類推,再進行第三輪,,,
就這樣最大的數一直往后排(冒),最后完成排序。所以我們稱這種排序算法為冒泡排序。
選擇排序是一種直觀的算法,每一輪會選出列中最小的值,把最小值排到前面。具體步驟如下:
插入排序步驟大致如下:
快速排序是由東尼·霍爾所發展的一種排序算法。在平均狀況下,排序 n 個項目要Ο(n log n)次比較。在最壞狀況下則需要Ο(n2)次比較,但這種狀況并不常見。事實上,快速排序通常明顯比其他Ο(n log n) 算法更快,因為它的內部循環(inner loop)可以在大部分的架構上很有效率地被實現出來,且在大部分真實世界的數據,可以決定設計的選擇,減少所需時間的二次方項之可能性。
步驟:
從數列中挑出一個元素,稱為 “基準”(pivot),
重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的后面(相同的數可以到任一邊)。在這個分區退出之后,該基準就處于數列的中間位置。這個稱為分區(partition)操作。
遞歸地(recursive)把小于基準值元素的子數列和大于基準值元素的子數列排序。
可以把數字放到數組中,然后使用sort
將數組排序:例如
$arr=array(3,1,20,10,99,5);
asort($arr);
print_r($arr)
結果為:
Array
(
[0]
=
1
[1]
=
3
[2]
=
5
[3]
=
10
[4]
=
20
[5]
=
99
)
然后再做你想要的操作
插入排序(Insertion Sort) 是一種較穩定 簡單直觀的排序算法 插入排序的工作原理 是通過構建有序序列 對于未排序的數據 在有序序列中從后向前掃描 找到合適的位置并將其插入 插入排序 在最好情況下 時間復雜度為O(n);在最壞情況下 時間復雜度為O(n );平均時間復雜度為O(n )
插入排序示例圖
/**
* 數據結構與算法(PHP實現) - 插入排序(Insertion Sort)。Tw.WiNGwit
*
* @author 創想編程(TOPPHP.ORG)
* @copyright Copyright (c) 2013 創想編程(TOPPHP.ORG) All Rights Reserved
* @license /licenses/mit-license.php MIT LICENSE
* @version 1.0.0 - Build20130613
*/
class InsertionSort {
/**
* 需要排序的數據數組。
*
* @var array
*/
private $data;
/**
* 數據數組的長度。
*
* @var integer
*/
private $size;
/**
* 數據數組是否已排序。
*
* @var boolean
*/
private $done;
/**
* 構造方法 - 初始化數據。
*
* @param array $data 需要排序的數據數組。
*/
public function __construct(array $data) {
$this-data = $data;
$this-size = count($this-data);
$this-done = FALSE;
}
/**
* 插入排序。
*/
private function sort() {
$this-done = TRUE;
for ($i = 1; $i $this-size; ++$i) {
$current = $this-data[$i];
if ($current $this-data[$i - 1]) {
for ($j = $i - 1; $j = 0 $this-data[$j] $current; --$j) {
$this-data[$j + 1] = $this-data[$j];
}
$this-data[$j + 1] = $current;
}
}
}
/**
* 獲取排序后的數據數組。
*
* @return array 返回排序后的數據數組。
*/
public function getResult() {
if ($this-done) {
return $this-data;
}
$this-sort();
return $this-data;
}
}
?
示例代碼 1
2
3
4
$insertion = new InsertionSort(array(9, 1, 5, 3, 2, 8, 6));
echo '
', print_r($insertion-getResult(), TRUE), '
'; lishixinzhi/Article/program/PHP/201311/20783
1、在test.php文件內,使用header設置test.php執行的編碼為utf8,避免輸出中文的時候出現亂碼。
2、在test.php文件內,創建一個測試的數組,例如,定義一個分類的數組,其對應的索引值分別為0,4,8。
3、在test.php文件內,使用array_values()方法將上一步的數據重新排序,并且從0開始,把重新排序的數組保存在$result變量中。
4、在test.php文件內,使用foreach方法遍歷數組,其中$k為索引值,$v為索引值對應的數組值。
5、在test.php文件內,使用echo方法輸出數組中的索引值和對應的數組值即可。