上回說到氣泡排序,這次說說選擇排序。
選擇排序(selection sort)是一種簡單直觀的排序演算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。
選擇排序的主要優點與資料移動有關。如果某個元素位於正確的最終位置上,則它不會被移動。選擇排序每次交換一對元素,它們當中至少有乙個將被移到其最終位置上,因此對n個元素的表進行排序總共進行至多n-1次交換。在所有的完全依靠交換去移動元素的排序方法中,選擇排序屬於非常好的一種。
紅色表示當前最小值,黃色表示已排序序列,藍色表示當前位置。
選擇排序的交換操作介於 0 和 (n - 1) 次之間。選擇排序的比較操作為 n (n - 1) / 2 次之間。選擇排序的賦值操作介於 0 和 3 (n - 1) 次之間。
比較次數o(n^2),比較次數與關鍵字的初始狀態無關,總的比較次數n=(n-1)+(n-2)+...+1=n*(n-1)/2。交換次數o(n),最好情況是,已經有序,交換0次;最壞情況交換n-1次,逆序交換n/2次。交換次數比氣泡排序少多了,由於交換所需cpu時間比比較所需的cpu時間多,n值較小時,選擇排序比氣泡排序快。
時間複雜度 о(n²)1最優時間複雜度 о(n²)
平均時間複雜度 о(n²)
空間複雜度 о(n) total, o(1) auxiliary
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php
/**
* user: wujunze
* email: [email protected]
* blog:
* date: 2016/11/5
*
*/
function
selectsort(
$arr
)
}
//已經確定了當前的最小值的位置,儲存到$p中。如果發現最小值的位置與當前假設的位置$i不同,則位置互換即可。
if
(
$p
!=
$i
)
}
//返回最終結果
return
$arr
;
}
var_dump(selectsort(
array
(4,66,3,23,91,36,88,6)));
執行結果
PHP實現 選擇排序
created by phpstorm.user baimayou date 19 4 6 time 下午4 19 選擇排序 分排序區間和未排序區間 取未排序區間的最小元素與未排序區間第乙個元素交換位置,放到已排序區間末尾 解法 兩層迴圈 第一層迴圈確定無序區間開始的位置,並將無序區間第乙個元素設定...
氣泡排序 選擇排序 快速排序(PHP實現)
arr array 5,3,6,9,10 str 氣泡排序 向右冒,小數冒泡 for i 0 i i var dump arr arr array 5,3,6,9,10 str 選擇排序 for i 0 i i 如果最大值位置和當前位置不同,則交換位置 if m i var dump arr 快速排...
選擇排序 PHP
github 位址 基本思想為每一趟從待排序的資料元素中選擇最小 或最大 的乙個元素作為首元素,直到所有元素排完為止,簡單選擇排序是不穩定排序 function pre arr function prend exit 選擇排序 基本思想為每一趟從待排序的資料元素中選擇最小 或最大 的乙個元素作為首元...