排序算法-选择排序
选择排序的基本思想是从数组的第一个元素开始查找剩余元素中的最小值,再将查找到的最小值与第一个元素比较,若小于第一个元素值则互换,然后进行第二次选择,从第二个元素之后开始查找最小值再比较,这样一直查找到只剩下一个元素。思想就是每次选择最小值,直到只剩一个元素。时间复杂度O(n^2),空间复杂度O(1)。
举例说明
数组:| 5 | 4 | 3 | 2 | 1 |
第一次遍历
首先查找第一个元素5之后的最小值,找到1后与5比较, 由于1<5所以将两数互换后得到数组| 1 | 4 | 3 | 2 | 5 | 。
第二次遍历
查找第二个元素4之后的最小值,找到2后与4比较,由于2<4所以将两数互换后得到数组| 1 | 2 | 3 | 4 | 5 | 。
第三次遍历
查找第三个元素3之后的最小值,找到4后与3比较,由于4>3所以不做任何操作,进行下一步。
第四次遍历
查找第四个元素4之后的最小值,找到5后与4比较,由于5>4所以不做任何操作,进行下一步。
第五次遍历
第五个元素5之后没有元素,跳出循环结束排序。
代码
void select_sort(int *arr, int len){
for(int i=0; i < len; i++){
int index = i;
for(int j = i + 1; j < len; j++){
if(arr[j] < arr[index])
index = j;
}
if(index != i){
int temp = arr[i];
arr[i] = arr[index];
arr[index] = temp;
}
}
}