选择排序
- 算法原理
- 一、适用场景
- 二、复杂度分析
- 1.时间复杂度
- 2.空间复杂度
- 三、代码实现
- 1、Python实现
- 2、Java实现
- 3、C语言实现
- 总结
算法原理
- 把数组划分为 有序区间(左侧) + 无序区间(右侧)。
- 每一轮遍历无序区间,找到其中最小值(或最大值)的下标。
- 将找到的最值元素,与无序区间第一个元素交换。
- 有序区间向右扩大一格,重复上述步骤,直到整个数组有序。
核心思想:不断选最值,放到最前面。
一、适用场景
小规模数据排序(数据量很小,简单够用);
交换代价远大于比较代价 的场景(如硬件底层、老旧设备);
算法入门教学、笔试手写最简排序;
内存极度受限、不能开辟额外空间的极简环境;
对排序稳定性无要求、追求代码极简的临时排序。
二、复杂度分析
1.时间复杂度
- 最好 / 平均 / 最坏:O(n²)
- 无论数组是否接近有序,都要完整扫描无序区间,无优化,这是和插入排序最大区别。
2.空间复杂度
属于原地排序,仅用常数级临时变量
- O(1)
三、代码实现
1、Python实现
defselection_sort(arr):n=len(arr)foriinrange(n):min_idx=iforjinrange(i+1,n):ifarr[j]<arr[min_idx]:min_idx=j arr[i],arr[min_idx]=arr[min_idx],arr[i]returnarr2、Java实现
publicvoidselectionSort(int[]arr){intn=arr.length;for(inti=0;i<n;i++){intminIdx=i;for(intj=i+1;j<n;j++){if(arr[j]<arr[minIdx])minIdx=j;}intt=arr[i];arr[i]=arr[minIdx];arr[minIdx]=t;}}3、C语言实现
voidselectionSort(intarr[],intn){intminIdx;for(inti=0;i<n-1;i++){minIdx=i;for(intj=i+1;j<n;j++)if(arr[j]<arr[minIdx])minIdx=j;swap(&arr[i],&arr[minIdx]);}}总结
记录自己的快乐学习日志,也祝贺观看到这的小伙伴早日学有所成,财富自由💰💰。
记得点赞👍、收藏👋呀!!!