什么是选择排序?
选择排序就是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到全部待排序的数据元素排完。
具体步骤:
假设有一个待排序的数组arr,则:
第1趟从arr[0]~arr[n-1]中选取最小值,与arr[0]交换;
第2趟从arr[1]~arr[n-1]中选取最小值,与arr[1]交换;
第i趟从arr[i-1]~arr[n-1]中选取最小值,与arr[i-1]交换;
如图:
下面我们来看代码:
#include<iostream> using namespace std; void SelectSort(int *arr, int len) { int min = 0; //记录最小值的下标 for (int i = 0; i < len; ++i) { min = i; for (int j = i + 1; j < len; ++j) { if (arr[j] < arr[min]) { min = j; } } if (min != i) { swap(arr[min], arr[i]); } } } int main() { int arr[] = {35,26,13,228,65,45,139,42,717,239,83, 123,563,1276}; int len = sizeof(arr) / sizeof(arr[0]); SelectSort(arr, len); for (int i = 0; i < len; ++i) { printf("%d ", arr[i]); } printf("\n"); }
代码运行结果如图所示:
总结:选择排序的时间复杂度为O(n^2),空间复杂度为O(n).
稳定性:是一个不稳定的排序算法。