选择排序理论
顾名思义,每次选中其中最小值,将最小的那个值与当前指针所指的值进行交换,指针向前推进一个单位,以此类推。
由于选择排序基于交换为前提,如果间隔多个单位产生交换,导致该排序时不稳定的。
例如:
初始数组:{3,3*,2}
最终排序结果:{2,3*,3}
此外,
- 选择排序的时间复杂度为O(n^2),比较次数固定为n *(n - 1) / 2,不由数值排布决定。
- 空间复杂度为O(1)。
选择排序代码实现
void selectionSort (int* nums, int n) {
for(int i = 0; i < n; i++){
int minIdx = i;
for(int j = i + 1; j < n ; j++){
minIdx = nums[j] < nums[minIdx]? j : minIdx;
}
// min -> nums[minIdx]
int tmp = nums[i]; nums[i]=nums[minIdx]; nums[minIdx]=tmp;
}
}