直接选择排序是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。
我们这里直接给出选择排序的优化,一次选出两个数据。
void SelectSort(int *arr, int n) { for (int i = 0; i < n; ++i) { int begin = i; int end = n; int min = i; int max = i; while (begin < end) { if (arr[begin] < arr[min]) { min = begin; } else { max = begin; } ++begin; } if (i == max) { max = min; } swap(arr[i], arr[min]); swap(arr[--end], arr[max]); } }直接选择排序的时间复杂度:O(N^2)[最好情况:O(N^2) 最坏情况:O(N^2)] 空间复杂度:O(1) 直接选择排序是一种不稳定的排序算法。
堆排序的时间复杂度:O(N*lgN)[最好情况:O(N*lgN) 最坏情况:O(N*lgN) ] 空间复杂度:O(1) 堆排序是一种不稳定的排序算法。