一、原理分析
以排升序为例,对于长度为n的待排序数组,每次遍历从中选出最小值与下标为0的元素交换,再从下标为1的地方遍历选出最小值与下标为1的元素交换,以此类推,当遍历了(n-1)次后,可使整个数组有序。
画图分析:
二、代码展示
void SelectSort(int* arr, int sz)
{
for (int j = 0; j < sz - 1; j++)//外层循环依次减小待排序区间
{
int min = j;
for (int i = j+1; i < sz; i++)//内层循环将区间中的每个值与区间最前端的值进行比较,找出最小值对应的下标
{
if (arr[i] < arr[min])
{
min = i;
}
}
int tmp = arr[j];//交换最小值与区间最前端的值
arr[j] = arr[min];
arr[min] = tmp;
}
}
int main()
{
int arr[] = { 2,6,3,1,4,5,7 };
int sz = sizeof(arr) / sizeof(arr[0]);
SelectSort(arr, sz);
for (int i = 0; i < sz; i++)
{
printf("%d ",arr[i]);
}
return 0;
}
三、特性总结
1.时间复杂度O(N^2),效率不高,使用性差
2.空间复杂度O(1)
3.稳定性:不稳定
四、小结
本人是C语言萌新一枚,希望能和大家多多交流,共同进步。如果对文章内容有什么指正、建议、疑问。欢迎在下方评论区留言一起探讨,谢谢大家!