C#实现选择排序

下面是详细讲解“C#实现选择排序”的完整攻略。

选择排序的算法原理

选择排序(Selection Sort)是一种简单直观的排序算法。其算法思想是将待排序序列分成已排序和未排序两个部分,每次从未排序的元素中选择最小(或最大)的元素,放到已排序的序列末尾。重复这个过程,直到所有元素都排序完毕。

C#实现选择排序的步骤

实现选择排序的过程有以下几个步骤:

  1. 定义待排序的数组,确定数组的长度,使用循环语句取出数组中的每个元素;
  2. 再使用一个循环语句,在未排序部分找到最小的元素,并记录其下标;
  3. 通过交换元素的方式,将已排序部分的最后一个元素和未排序部分中的最小元素位置互换;
  4. 重复第2、3步,直到未排序的元素为 0 个,整个数组排序完毕。

下面我们来看一下其中的代码实现。

C#代码实现

public static void SelectionSort(int[] arr)
{
    int len = arr.Length;
    for (int i = 0; i < len - 1; i++)
    {
        int minIndex = i;
        for (int j = i + 1; j < len; j++)
        {
            if (arr[j] < arr[minIndex])
            {
                minIndex = j;
            }
        }
        if (minIndex != i)
        {
            int temp = arr[i];
            arr[i] = arr[minIndex];
            arr[minIndex] = temp;
        }
    }
}

代码解释:

  1. 定义一个静态方法 SelectionSort 来对整型数组进行排序;
  2. 拿到待排序数组的长度,使用双重循环,外层的循环来确定已排序部分的长度,内层循环则是用来找到最小的元素;
  3. 如果找到了比当前下标元素值更小的元素,通过记录 minIndex 的方式来保存这个元素的下标;
  4. 判断minIndex 是否等于已排序的边界,如果不等,则通过另一个变量 temp 来交换两个位置的元素值。

下面演示一下算法执行过程:

例如,我们要对数组 [2, 6, 4, 3, 1, 5, 8, 9, 7] 进行排序。

  1. 在第一次循环中,选择最小的元素 1,将其与第一个元素 2 互换位置,数组变为 [1, 6, 4, 3, 2, 5, 8, 9, 7]
  2. 第二次循环中,选择最小的元素 2,将其与第二个元素 6 互换位置,数组变为 [1, 2, 4, 3, 6, 5, 8, 9, 7]
  3. 依次类推,直到排序完成,最终结果为 [1, 2, 3, 4, 5, 6, 7, 8, 9]

示例说明

下面提供两个示例,分别是排序一个长度为 10 的数组和一个长度为 100 的数组。

示例1:排序一个长度为 10 的数组

int[] arr = new int[] { 2, 6, 4, 3, 1, 5, 8, 9, 7, 10 };
SelectionSort(arr);
Console.WriteLine("排序后的数组为:");
foreach (var item in arr)
{
    Console.Write(item + " ");
}

输出结果为:

排序后的数组为:
1 2 3 4 5 6 7 8 9 10

示例2:排序一个长度为 100 的数组

int[] arr = new int[100];
Random rand = new Random();
for (int i = 0; i < arr.Length; i++)
{
    arr[i] = rand.Next(0, 1000);
}
Console.WriteLine("排序前的数组为:");
foreach (var item in arr)
{
    Console.Write(item + " ");
}
SelectionSort(arr);
Console.WriteLine("\n排序后的数组为:");
foreach (var item in arr)
{
    Console.Write(item + " ");
}

输出结果为:

排序前的数组为:
491 876 883 502 650 350 727 551 4 935 790 362 348 997 505 372 963 266 529 345 796 125 23 250 544 819 454 902 941 73 776 485 453 188 742 43 613 464 708 425 270 888 971 218 107 414 4 856 672 284 49 515 535 150 304 817 863 878 593 996 546 826 571 102 303 520 758 206 325 76 842 442 606 13 64 103 237 703 778 348 997 779 428 125 192 646 485 551 464 789 260 222 425 427 26 571 758 827 441 516 476 927 895 558 410 619 209 377 496 785 473 
排序后的数组为:
4 4 13 23 26 43 49 64 73 76 102 103 107 125 125 150 188 192 206 209 218 222 237 250 260 266 270 284 303 304 325 345 348 348 350 362 372 377 410 414 425 425 427 428 441 442 453 454 464 464 473 476 485 485 496 502 515 516 529 535 544 546 551 551 558 571 571 593 606 613 619 646 650 672 703 708 727 742 758 758 776 778 779 785 789 790 796 817 819 826 827 842 856 863 876 878 883 888 895 902 927 935 941 963 971 996 997 997 

总结

以上就是C#实现选择排序的详细攻略,选择排序虽然简单直观,但其时间复杂度为O(n^2),在面对大量数据时性能不佳,不适用于大规模的排序应用。如果需要面对大数据量的排序,应该优先选择更快速、更优化的算法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#实现选择排序 - Python技术站

(0)
上一篇 2023年6月6日
下一篇 2023年6月6日

相关文章

  • .NET使用一行命令轻松生成EF Core项目框架

    dotnet ef是Entity Framework Core(EF Core)的一个命令行工具,用于管理EF Core应用程序的数据库和代码。除了提供管理数据库的命令之外,dotnet ef还可以生成和管理实体和上下文代码。本文将介绍如何使用dotnet ef动态生成代码。 一、环境准备 1、项目准备 用vs2022新建一个.NET6的asp.net co…

    C# 2023年4月27日
    00
  • C#逐行读取txt文件的方法

    当我们需要读取文本文件内容时,可以使用C#内置的System.IO命名空间中的StreamReader类。 以下是逐行读取txt文件并输出内容的代码示例: using System.IO; // 读取文件路径 string filePath = "example.txt"; // 判断文件是否存在 if (File.Exists(file…

    C# 2023年6月1日
    00
  • C# 微信支付回调验签处理的实现

    下面是“C#微信支付回调验签处理的实现”的完整攻略。 一、微信支付回调 在微信支付完成后,微信会向指定的回调URL发送支付结果消息通知,该通知内容是一个XML格式的文本,需要验证消息的真伪和合法性。 二、回调消息处理流程 微信回调验签的主要流程如下: 接收微信回调通知,并解析其内容得到相应的参数。 从微信公众平台后台下载证书,并将证书保存至本地。 将回调消息…

    C# 2023年6月1日
    00
  • ASP.NET Core 6框架揭秘实例演示之如何承载你的后台服务

    ASP.NET Core 6框架揭秘实例演示之如何承载你的后台服务 在本攻略中,我们将详细讲解如何使用ASP.NET Core 6框架承载你的后台服务。我们将介绍ASP.NET Core 6框架的基础知识、如何创建和承载后台服务的步骤以及两个示例说明。 ASP.NET Core 6框架基础知识 ASP.NET Core 6框架是一个跨平台的开源框架,用于构建…

    C# 2023年5月17日
    00
  • 使用 CliWrap 让C#中的命令行交互(推荐)

    使用 CliWrap 可以让 C# 中的命令行交互变得更加方便和高效。下面是具体的步骤和示例说明。 环境准备 在开始使用 CliWrap 之前,需要先确保电脑上已经安装了 .NET Core 开发环境。可以在终端中输入下面的命令检查。 dotnet –version 如果输出了版本号,则说明已经安装了 .NET Core。否则需要去官网下载并安装。 另外,…

    C# 2023年6月3日
    00
  • C#把整个文件内容读入字符串变量的方法

    要把整个文件内容读入 C# 字符串变量,一种常见的方法是使用 System.IO.File 对象的 ReadAllText 方法。具体步骤如下: 引入 System.IO 命名空间 在 C# 代码文件的顶部,使用 using 关键字引入 System.IO 命名空间。代码示例: using System.IO; 使用 File.ReadAllText 方法读…

    C# 2023年6月1日
    00
  • C#多线程系列之工作流实现

    C#多线程系列之工作流实现 在使用C#开发多线程应用时,需要考虑线程间的通信、锁定、线程池等诸多因素。而将这些因素整合成“工作流”则是一个不错的选择。本篇文章将为大家介绍如何使用工作流实现多线程编程。 工作流概念 工作流是一种基于人工业务过程流程的自动化技术,常用于业务流程管理、流程模拟、调度执行等领域。在C#多线程编程中,我们将线程视作工作流程中的具体实现…

    C# 2023年6月6日
    00
  • 实例分享C#中Explicit和Implicit用法

    实例分享C#中Explicit和Implicit用法 在C#中,我们可以通过两种方式定义类型转换:Implicit(隐式)和Explicit(显式)。 Implicit转换: 由编译器自动进行,不需要通过任何显式的转换操作符来触发。 Explicit转换: 需要使用显式的转换操作符来触发,否则编译器会报错。 本文将通过两个示例,详细讲解C#中的Explici…

    C# 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部