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