每天学习一个小算法:选择排序

选择排序


算法原理

  1. 把数组划分为 有序区间(左侧) + 无序区间(右侧)。
  2. 每一轮遍历无序区间,找到其中最小值(或最大值)的下标。
  3. 将找到的最值元素,与无序区间第一个元素交换。
  4. 有序区间向右扩大一格,重复上述步骤,直到整个数组有序。

核心思想:不断选最值,放到最前面。


一、适用场景

小规模数据排序(数据量很小,简单够用);

交换代价远大于比较代价 的场景(如硬件底层、老旧设备);

算法入门教学、笔试手写最简排序;

内存极度受限、不能开辟额外空间的极简环境;

对排序稳定性无要求、追求代码极简的临时排序。

二、复杂度分析

1.时间复杂度

  • 最好 / 平均 / 最坏:O(n²)
  • 无论数组是否接近有序,都要完整扫描无序区间,无优化,这是和插入排序最大区别。

2.空间复杂度

属于 原地排序,仅用常数级临时变量

  • O(1)

三、代码实现

1、Python实现

python 复制代码
def selection_sort(arr):
    n=len(arr)
    for i in range(n):
        min_idx=i
        for j in range(i+1,n):
            if arr[j]<arr[min_idx]:
                min_idx=j
        arr[i],arr[min_idx]=arr[min_idx],arr[i]
    return arr

2、Java实现

java 复制代码
public void selectionSort(int[] arr){
    int n=arr.length;
    for(int i=0;i<n;i++){
        int minIdx=i;
        for(int j=i+1;j<n;j++){
            if(arr[j]<arr[minIdx]) minIdx=j;
        }
        int t=arr[i];arr[i]=arr[minIdx];arr[minIdx]=t;
    }
}

3、C语言实现

c 复制代码
void selectionSort(int arr[],int n){
    int minIdx;
    for(int i=0;i<n-1;i++){
        minIdx=i;
        for(int j=i+1;j<n;j++)
            if(arr[j]<arr[minIdx]) minIdx=j;
        swap(&arr[i],&arr[minIdx]);
    }
}

总结

记录自己的快乐学习日志,也祝贺观看到这的小伙伴早日学有所成,财富自由💰💰。

记得点赞👍、收藏👋呀!!!

相关推荐
一去不复返的通信er12 小时前
力扣-图论-岛屿数量
算法·leetcode·图论
行思理12 小时前
go语言学习难度及适合学习的人群
开发语言·学习·golang
wangchunyu11414 小时前
JAVA CompletableFuture异步编程实战
java·开发语言·python
paopaokaka_luck15 小时前
流浪动物救助与收养系统(DeepSeek AI对话、 ECharts多维分析、救助流程衔接、领养与回访衔接、 捐赠确认与公示、志愿者协作)
java·前端·javascript·人工智能·mysql·echarts·推荐算法
Thomas.Sir15 小时前
第9课:SpringBoot4.x Web开发基础:WebMvc自动配置、静态资源、请求参数接收
java·spring boot
程序 代码狂人15 小时前
切片表与分区表的区别(数据开发面试版)
java·大数据·开发语言·数据仓库·算法
HDU-Dade15 小时前
【校招笔试真题】简要介绍 Self-Attention 的前沿算法
人工智能·算法
2501_9445215916 小时前
Deepmerge 跨端三方库仓颉适配全流程
java·python·eclipse·github
楚山之石16 小时前
【Medical Image Analysis】深度学习医学图像合成综述:伪CT、合成MRI与合成PET的架构、性能与临床边界
图像处理·人工智能·学习·mr·mri
南归北隐17 小时前
Spring AI Alibaba Graph框架实现MCP数据库查询实战
java·后端·spring ai·mcp·spring ai mcp