伪代码如下:
selection-sort(A)
n = A.length
for j = 1 to (n-1)
smallest = j
for i = j + 1 to n
if A[i] < A[smallest]
smallest = i
exchange A[j] with A[smallest]
因为子数组A[1..j-1]是已经完成排序,同时这j-1个数是整个数组A[1...n]中最小的j-1个数,因此满足循环不变式.
当对于前n-1个元素选择排序之后,这n-1个元素是数组内最小的n-1个元素,剩下的第n个元素自然是最大的元素.
算法时间复杂度
python实现:
def choose(A,n):
i = 0
while i < n:
min = A[i]
index = i
for j in range(i, n):
if A[j] < A[i]:
min = A[j]
index = j
A[index] = A[i]
A[i] = min
i += 1
return A