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日

相关文章

  • C#获取当前页面的URL示例代码

    下面是C#获取当前页面的URL的完整攻略。 获取当前页面的URL 在C#中,可以使用HttpContext类来获取当前页面的URL。HttpContext类可以访问请求的相关信息,例如它的路径、查询字符串、表单、标头和cookies。 步骤1:导入命名空间 在代码中的第一行,必须包含以下命名空间: using System.Web; 步骤2:获取HttpCo…

    C# 2023年6月7日
    00
  • c#中设置快捷键

    设置快捷键可以方便用户快速执行某些操作,提高使用效率。在c#中,可以通过以下方式设置快捷键: 在窗体上设置快捷键 在窗体上选中某个控件或者整个窗体,然后在属性窗口中找到“ShortcutKeys”属性,选择想要设置的快捷键即可。比如,给窗体设置快捷键“Ctrl+S”来保存文件,代码如下: private void Form1_KeyDown(object s…

    C# 2023年6月6日
    00
  • php实现JWT(json web token)鉴权实例详解

    PHP实现JWT(JSON Web Token)鉴权实例详解 什么是JWT? JWT是一种用于身份验证和授权的开放标准(RFC 7519),它定义了一种紧凑且自包含的方式来在各方之间安全地传输信息。JWT通常由三部分组成:头部、载荷和签名。头部包含了令牌的元数据,载荷包含了令牌的主要信息,签名用于验证令牌的真实性。 JWT的优点 简单:JWT是一种轻量级的标…

    C# 2023年5月17日
    00
  • 带你复习c# 托管和非托管资源

    带你复习c#托管和非托管资源 托管资源与非托管资源的概念 托管资源是指由CLR(公共语言运行库)进行垃圾回收和内存分配等管理的资源,常见的有.NET框架类库、用户自定义的类、字符串等。 而非托管资源是指CLR不进行资源管理的资源,常见的有操作系统资源、COM组件、指针、内存映射文件等。 如何释放非托管资源 在C#中释放非托管资源一般采用IDisposable…

    C# 2023年6月6日
    00
  • C#基于COM方式读取Excel表格的方法

    下面是C#基于COM方式读取Excel表格的方法的完整攻略。 一、前置条件准备 在使用C#基于COM方式读取Excel表格之前,需要先安装Microsoft Office软件(建议安装MS Office 2010及以上版本),并且安装后需要以管理员身份运行Excel至少一次,以防Excel第一次运行时的初始化过程出错。 二、在C#中使用Excel COM组件…

    C# 2023年6月8日
    00
  • C# 创建、部署和调用WebService简单示例

    下面我会详细讲解“C# 创建、部署和调用WebService简单示例”的完整攻略。 什么是Web Service? Web Service即 Web 服务,它是一种跨平台、跨编程语言实现的远程调用技术。通过Web Service,我们可以让不同的系统之间互相通信和交互。在Web Service中,数据以XML格式传输,使用简单易懂的HTTP协议通信。 如何创…

    C# 2023年6月3日
    00
  • Redis总结笔记(二):C#连接Redis简单例子

    这篇文章是讲解如何在C#中连接Redis数据库,并进行简单的操作。文章会包含以下几个部分: 环境准备 Nuget安装Redis库 Redis连接与配置 Redis常用操作示例 1. 环境准备 在C#中连接Redis之前,需要确保本地已经安装好了Redis数据库,并且正在运行。可在Redis官网下载安装Redis,也可以下载Redis Desktop Mana…

    C# 2023年5月31日
    00
  • C#实现用户自定义控件中嵌入自己的图标

    下面是C#实现用户自定义控件中嵌入自己的图标的完整攻略: 步骤一:添加图标资源 用户可以在程序资源文件(.resx)中添加他们自己的图标,以便在自定义控件中使用。首先,需要将图标文件添加到项目的资源文件中,具体步骤如下: 在Visual Studio中打开项目,找到“资源文件”(Resources.resx); 在“资源文件”窗口中,单击“添加资源”按钮,选…

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