选择排序(Selection Sort):从小到大排序
算法思想:在未排序的序列中,找到最小的元素将其交换到已排序序列的首位,然后再从未排序序列中,找到最小的元素将其交换到已排序序列的末尾。以此类推,直到所有元素都已排序完毕。
算法过程:
1、第一轮遍历,在未排序的序列中,依次遍历所有元素,选出最小值,将其与未排序序列的第一个元素进行交换。
2、第二轮遍历未排序序列,选出最小值,将其与未排序序列的第一个元素进行交换。
3、进行n-1轮遍历,即可排序完毕。
动图演示
Python实现
def selectionSort(lst):
n = len(lst)
for i in range(n):
minIndex = i
for j in range(i, n):
if lst[minIndex] > lst[j]:
minIndex = j
lst[i], lst[minIndex] = lst[minIndex], lst[i]
return lst
Java实现
public int[] selectionSort(int[] array) {
int length = array.length;
for (int i = 0; i < length; i++) {
boolean isSorted = true;
int minIndex = i;
for (int j = i; j < length; j++) {
if (array[minIndex] > array[j]) {
minIndex = j;
}
int temp = array[minIndex];
array[minIndex] = array[j];
array[j] = temp;
isSorted = false;
}
if (isSorted) {
break;
}
}
return array;
}
复杂度
1、时间复杂度
最坏情况:
O
(
n
2
)
O(n^{2})
O(n2)
最好情况:
O
(
2
)
O(^{2})
O(2)
平均:
O
(
n
2
)
O(n^{2})
O(n2)
2、空间复杂度:
O
(
1
)
O(1)
O(1)
3、稳定性:不稳定