选择排序
时间复杂度\(\mathrm{O}(n^2)\)
每次都对无序片段进行整趟扫描,取得最大或最小的那个元素,放到有序片段的前方或后方
算法思路如图所示
与冒泡排序相比就是少了很多交换元素的操作,选择排序每次只进行一次元素交换
代码
void selectSort(int *a, size_t size) {
int min;
for (int i = 0; i < size; ++i) {
min = i;
for (int j = i + 1; j < size; ++j) {
if (a[j] < a[min])
min = j;
}
if (i != min)
swap(a[i], a[min]);
}
}