PHP實現選擇排序

2021-08-16 20:28:01 字數 2310 閱讀 8524

上回說到氣泡排序,這次說說選擇排序。

選擇排序(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²)

最優時間複雜度 о(n²)

平均時間複雜度 о(n²)

空間複雜度 о(n) total, o(1) auxiliary

1

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

*

*/

functionselectsort($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 選擇排序 基本思想為每一趟從待排序的資料元素中選擇最小 或最大 的乙個元素作為首元...