c#选择排序

选择排序思路

  • 将数组分为已排序(前部)和未排序(后部)两部分。初始时已排序部分为空。

  • 在每一轮中,从未排序部分找出最小(或最大)的元素,将其与未排序部分的第一个元素交换。这样,该元素就被放到了已排序部分的末尾。

  • 重复上述过程,直到所有元素都被放入已排序部分。

时空复杂度

  • 时间复杂度:O(n²)(无论数据是否有序,都需要进行 n-1 轮扫描)。

  • 空间复杂度:O(1)(原地排序)。

  • 稳定性:不稳定(例如,交换可能改变相同元素的相对顺序)。

速记套路

思路 新建中间变量,依次比较,找出极值,放入目标位置,比较n轮

套路写法 两层循环 外层轮数 内层寻找 初始索引 记录极值 内层循环外交换

复制代码
 int[] arr = new int[]{ 3,6,2,10,998,23,5};
for (int i = 0; i < arr.Length; i++)
{
    int index = 0;
    for (int j = 1; j < arr.Length-i; j++)
    {
        
        if (arr[index] < arr[j])
        {
             index =j ;                      
        }
    }
    int temp = arr[index];
    arr[index]=arr[arr.Length - 1 - i] ;
    arr[arr.Length - 1 - i]=temp;
}
for (int i = 0; i < arr.Length; i++)
{
    Console.WriteLine(arr[i]);
}
相关推荐
ZhengEnCi2 小时前
内存装不下怎么取 Top 100:外部排序与分布式 Top-K 的实测取舍
分布式·算法·排序算法
淡海水13 小时前
07-02-源码-.NET Core GC分配路径
算法·unity·c#·.netcore·gc·1024程序员节
吴可可12315 小时前
C#调用摄像头拍照的三种API方案
c#
Msir_Modern20 小时前
Noita 元胞沙盒笔记
算法·unity·c#·游戏引擎·元胞自动机
星之擎1 天前
Task 很优雅的取消方式是什么?C# 里面。
开发语言·c#
czhc11400756631 天前
一周概念复盘:预热、漂移与门禁
c#
云中飞鸿1 天前
.Net和C#有什么关系?(从C++视角观察)
开发语言·c#·.net
淡海水1 天前
07-04-源码-.NET Core GC清扫与压缩
unity·架构·c#·.netcore·gc·1024程序员节
zwm2698888151 天前
hd 3#负一西送风,能远程启不能远程停
c#
Ai-_Man1 天前
Meta Muse还是不可以导出左侧所有对话,只能点进去单条内容导出,方法不对吗?
开发语言·人工智能·ai·小程序·c#·1024程序员节