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日

相关文章

  • ASP.NET Core中的wwwroot文件夹

    ASP.NET Core中的wwwroot文件夹是用于存放Web应用程序静态资源的目录。该目录中的文件可被直接发布到Web服务器上,比如图片、JavaScript、CSS、HTML文件等,这些文件可以通过路径直接访问,而不需要经过服务器端的处理。下面我们来详细讲解一下wwwroot文件夹。 如何创建wwwroot文件夹? 在使用ASP.NET Core建立W…

    C# 2023年6月3日
    00
  • .Net Core应用增强型跨平台串口类库CustomSerialPort()详解

    .Net Core应用增强型跨平台串口类库CustomSerialPort()详解 在本攻略中,我们将详细讲解.Net Core应用增强型跨平台串口类库CustomSerialPort()的技术及工作原理,并提供两个示例说明。 什么是CustomSerialPort()? CustomSerialPort()是一种.Net Core应用增强型跨平台串口类库,…

    C# 2023年5月16日
    00
  • 基于.net的分布式系统限流组件示例详解

    让我们来详细讲解一下关于“基于.net的分布式系统限流组件示例详解”的完整攻略。 1. 什么是分布式系统限流? 在一个分布式系统中,由于不同的模块可能会同时发起大量请求,对于一个稳定的服务而言,需要对这些请求进行限制,以避免系统过载导致的服务不可用或响应变慢情况。这个过程就被称为分布式系统限流。 2. 基于.net的分布式系统限流组件 本篇攻略介绍的是基于.…

    C# 2023年6月6日
    00
  • C#使用foreach语句遍历集合类型的方法

    当我们需要遍历一个集合类型的时候,使用foreach语句比使用for循环更为方便,可以避免通过索引访问集合元素的困扰,提高了代码可读性,并且能够支持不同数据类型的集合类型。以下是关于C#使用foreach语句遍历集合类型的完整攻略。 1.基本语法 C#中使用foreach语句遍历集合类型的基本语法格式如下: foreach (var item in coll…

    C# 2023年6月7日
    00
  • c#实现多线程局域网聊天系统

    C#实现多线程局域网聊天系统攻略 前言 本文介绍如何使用C#语言编写多线程局域网聊天系统。局域网聊天系统主要用于小范围内的通信,可以在公司、学校或家庭之间使用。使用多线程技术可以提升系统的并发性能,增强用户体验。本文将使用Visual Studio开发工具来进行程序设计和实现。 程序设计 整体架构 客户端程序:用于与其他用户进行通信和交流,需要与服务器程序进…

    C# 2023年6月6日
    00
  • C# 多网卡 Server Listen

    当服务器有多个网卡时,我们需要指定所有网卡进行监听,以确保能够接收所有连接请求。下面是实现 C# 多网卡 Server Listen 的完整攻略。 第一步:获取本机所有 IP 地址 在 C# 中,可以使用 Dns.GetHostAddresses() 方法获取本机所有的 IP 地址,代码如下: var hostName = Dns.GetHostName()…

    C# 2023年6月6日
    00
  • C# 大小写转换(金额)实例代码

    下面我将详细讲解“C# 大小写转换(金额)实例代码”的完整攻略,希望对您有所帮助。 1. 需求分析 这段代码的主要作用是将数字金额转换为中文大写金额。我们通常在财务方面的业务操作中经常会涉及到金额的输入、输出和转换,而中文大写金额是一种比较规范的书写方式,因此这段代码具有广泛的应用价值。 2. 基本思路 具体实现的基本思路如下: 首先将数字金额按照小数点进行…

    C# 2023年6月7日
    00
  • asp.net JSONHelper JSON帮助类

    ASP.NET JSONHelper JSON帮助类攻略 什么是JSONHelper JSON帮助类? JSONHelper JSON帮助类是一个为处理JSON数据而设计的类,可以简化JSON数据的生成、解析和转换。在ASP.NET应用程序中,JSONHelper JSON帮助类可以极大地简化编程工作,并提高代码的可读性和可维护性。 如何使用JSONHelp…

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