首页 > 编程语言 >C# 排序算法之选择排序

C# 排序算法之选择排序

时间:2024-09-03 09:50:31浏览次数:12  
标签:minIndex arr C# 元素 最小值 int 算法 排序

选择排序(Selection Sort)是一种简单直观的排序算法。它的工作原理是:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

以下是选择排序算法的C#实现:

using System;

class Program
{
    static void Main(string[] args)
    {
        int[] arr = { 64, 34, 25, 12, 22, 11, 90 };
        SelectionSort(arr);
        Console.WriteLine("Sorted array: ");
        PrintArray(arr);
    }

    // 选择排序算法
    static void SelectionSort(int[] arr)
    {
        int n = arr.Length;
        // 外层循环控制排序的轮数
        for (int i = 0; i < n - 1; i++)
        {
            // 假设当前位置i是最小值的索引
            int minIndex = i;
            // 内层循环负责找到[i, n)区间内的最小值索引
            for (int j = i + 1; j < n; j++)
            {
                // 如果发现更小的值,则更新最小值索引
                if (arr[j] < arr[minIndex])
                {
                    minIndex = j;
                }
            }
            // 如果最小值索引不是i,说明找到了更小的值,需要将其与arr[i]交换
            if (minIndex != i)
            {
                // 交换arr[i]和arr[minIndex]
                int temp = arr[i];
                arr[i] = arr[minIndex];
                arr[minIndex] = temp;
            }
        }
    }

    // 打印数组的方法
    static void PrintArray(int[] arr)
    {
        foreach (int i in arr)
        {
            Console.Write(i + " ");
        }
        Console.WriteLine();
    }
}

在这个实现中,SelectionSort 方法是选择排序的核心。它首先定义了一个外层循环,用于控制排序的轮数(即需要确定位置的元素个数)。在每一轮中,内层循环负责遍历未排序的部分,以找到当前轮次中的最小值(或最大值,根据排序需求而定)。一旦找到最小值,就将其与当前轮次起始位置的元素交换。这样,每一轮结束后,当前轮次起始位置的元素就是它在整个数组中的最终位置。通过重复这个过程,直到所有元素都被放置在正确的位置上,排序就完成了。

PrintArray 方法用于打印排序后的数组,以便于验证排序结果。

选择排序的时间复杂度为O(n^2),在数据量较大时效率较低。

标签:minIndex,arr,C#,元素,最小值,int,算法,排序
From: https://blog.csdn.net/x1234w4321/article/details/141717827

相关文章

  • 第八章 【前端】Mock.js(8.3)——数据占位符定义规范 DPD
    8.3数据占位符定义规范DPDMock.Random是一个工具类,用于生成各种随机数据。Mock.Random类中的方法在数据模板中称为『占位符』,书写格式为@占位符(参数[,参数])。占位符的格式为:'属性名':@占位符Mock.Random类中提供的完整方法(占位符)如下:Type(类型)Method(占......
  • 算法题笔记
    时间和空间复杂度:referdoc小记:时间复杂度是用大写的“O”来表示的,比如:O(1),O(n),O(logn),O(nlogn),O(n²)等常量可以被忽略。例如5n,换成大O表示法就是O(n)。对于算法的空间复杂度也可以简单的进行总结一下:如果申请的是有限个数(常量)的变量,空间复杂度为O(1)。如果申请的......
  • x-cmd pkg | gdu - 用 Go 编写的磁盘使用分析器
    目录简介首次用户功能特点常见用法类似或相关的工具进一步阅读简介gdu是由DanielMilde基于Go编写的开源工具,是一个磁盘使用分析器。Gdu主要用于SSD磁盘,它可以充分利用并发处理。不过,HDD也适用,但性能增益不大。首次用户本文的demo展现了如何通过x-cmd......
  • 图像信号处理卡设计原理图:FMC213V3-基于FMC兼容1.8V IO的Full Camera Link 输入子卡
    FMC213V3-基于FMC兼容1.8VIO的FullCameraLink输入子卡 一、板卡概述   该板卡为了考虑兼容1.8V电平IO,适配Virtex7,Kintex Ultrascale,Virtex ultrasacle + FPGA而特制,如果要兼容原来的3.3V 也可以修改硬件参数。板卡支持1路Full Camera link输入,同时......
  • 「代码随想录算法训练营」第五十二天 | 图论 part10
    目录Floyd算法题目:97.小明逛公园A*算法题目:126.骑士的攻击最短路算法总结Floyd算法Floyd算法用于求解多源最短路问题(求多个起点到多个终点的多条最短路径)。在前面学习的dijkstra算法、Bellman算法都是求解单源最短路的问题(即只能有一个起点)。注意:Floyd算法对边的权值正负没......
  • 1. 初识算法
    1.什么是算法定义:在数学和计算机科学领域,算法是一系列有限的严谨指令,通常用于解决一类特定问题或执行计算Inmathematicsandcomputerscience,analgorithm(/ˈælɡərɪðəm/)isafinitesequenceofrigorousinstructions,typicallyusedtosolveaclassof......
  • docker 指令
    systemctlstartdocker#开启docker服务systemctlstatusdocker#查看docker运行状态systemctlstopdocker#停止docker服务systemctlrestartdocker#重启dockerdockerversion#查看Docker版本信息dockerinfo#显示Docker的系统信息,包括镜像和容器的数量......
  • 解读 XMC 转 PXIE 载板转接卡:突破接口限制的关键桥梁
    在当今高速发展的科技领域,电子设备的性能和功能不断提升,而不同接口标准之间的兼容性和通信问题也日益凸显。XMC转PXIE载板转接卡作为一种创新的解决方案,在实现XMC接口与PXIE接口的连接和数据交互方面发挥着重要作用。首先,让我们来了解一下XMC接口和PXIE接口。XMC(eXten......
  • 深入剖析 PCI 转 CPCI 载板转接卡:连接不同架构的桥梁
    在计算机技术不断发展的进程中,硬件接口的多样性和演进促使了各种转接卡的出现,以满足不同接口标准之间的连接和通信需求。其中,PCI转CPCI载板转接卡作为一种关键的转接设备,在实现PCI(PeripheralComponentInterconnect)接口与CPCI(CompactPCI)接口之间的转换方面发挥着重要作用。......
  • 读书笔记:高效C/C++调试
    高效C/C++调试(美)严琦、卢宪廷目录第1章调试符号和调试器11.1调试符号11.1.1调试符号概览2全局变量文件行号数据类型1.1.2DWARF格式31.2实战故事1:数据类型的不一致141.3调试器的内部结构161.3.1用户界面161.3.2符号管理模块161.3.3目标管理模块......