C#算法之冒泡排序、插入排序、选择排序

C#算法之冒泡排序、插入排序、选择排序

在学习C#算法的过程中,冒泡排序、插入排序、选择排序是最基础且常用的排序算法之一。这些排序算法可以对数组进行排序,使其按照升序或降序排列。

本文将详细讲解这三种排序算法的原理和实现步骤,并提供两个示例说明。

冒泡排序

冒泡排序是一种比较简单的排序算法,其基本思想是:将相邻的两个元素进行比较,如果前一个元素比后一个元素大,就交换它们的位置。

具体实现步骤如下:

  1. 从数组的第一个元素开始,依次将相邻的两个元素进行比较,如果顺序不对,则交换它们的位置。

  2. 把数组中的元素全部比较一遍后,确定最后一个元素是最大或最小的,然后再重复以上步骤,但是不再比较最后一个元素。

  3. 重复以上步骤,直到所有元素都排序完成。

冒泡排序的时间复杂度为O(n^2),未排序的数组越大,所需的时间就越长。代码示例如下:

public static void BubbleSort(int[] arr)
{
    int temp;

    for (int i = 0; i < arr.Length - 1; i++)
    {
        for (int j = 0; j < arr.Length - i - 1; j++)
        {
            if (arr[j] > arr[j + 1])
            {
                temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}

示例1:对数组{5, 3, 8, 6, 4}进行冒泡排序,结果应该为{3, 4, 5, 6, 8}。

int[] arr = {5, 3, 8, 6, 4};
BubbleSort(arr);
foreach (int i in arr)
{
    Console.Write(i + " ");
}

输出结果为:3 4 5 6 8

插入排序

插入排序是通过构建有序序列,对于未排序的数据,在已排序序列中从后向前扫描,找到相应位置并插入。具体实现步骤如下:

  1. 从第一个元素开始,该元素可以认为已经被排序。

  2. 取出下一个元素,在已经排序的元素序列中从后向前扫描。

  3. 如果已排序的元素大于新元素,将该元素移到下一个位置。

  4. 重复步骤3,直到已排序的元素小于或等于新元素。

  5. 将新元素插入到该位置后。

  6. 重复步骤2~5,直到所有元素都排序完成。

插入排序的时间复杂度为O(n^2)。代码示例如下:

public static void InsertionSort(int[] arr)
{
    for (int i = 1; i < arr.Length; i++)
    {
        int value = arr[i];
        int j = i - 1;
        while (j >= 0 && arr[j] > value)
        {
            arr[j + 1] = arr[j];
            j--;
        }
        arr[j + 1] = value;
    }
}

示例2:对数组{12, 11, 13, 5, 6}进行插入排序,结果应该为{5, 6, 11, 12, 13}。

int[] arr = { 12, 11, 13, 5, 6 };
InsertionSort(arr);
foreach (int i in arr)
{
    Console.Write(i + " ");
}

输出结果为:5 6 11 12 13

选择排序

选择排序也是一种简单的排序算法,其基本思想是每次找到最小值或最大值,将其放到数组的最前面或最后面,然后对剩余的未排序的元素重复以上步骤。具体实现步骤如下:

  1. 在未排序的元素中找到最小值或最大值,将其放到序列的起始位置。

  2. 从剩余未排序的元素中继续寻找最小值或最大值,放到已排序的序列的末尾。

  3. 重复步骤2,直到所有元素都排序完成。

选择排序的时间复杂度也是O(n^2)。代码示例如下:

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

示例3:对数组{64, 25, 12, 22, 11}进行选择排序,结果应该为{11, 12, 22, 25, 64}。

int[] arr = { 64, 25, 12, 22, 11 };
SelectionSort(arr);
foreach (int i in arr)
{
    Console.Write(i + " ");
}

输出结果为:11 12 22 25 64

以上便是冒泡排序、插入排序、选择排序的详细介绍和代码示例。在实际应用中,可以根据具体场景选择不同的排序算法来提高效率和准确性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#算法之冒泡排序、插入排序、选择排序 - Python技术站

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

相关文章

  • ASP.NET缓存方法分析和实践示例代码第2/2页

    下面我会详细讲解ASP.NET缓存方法分析和实践示例代码第2/2页的完整攻略。 1. 简介 缓存是提高应用程序性能的重要手段之一。ASP.NET框架提供了多种缓存方法,本文将讨论分析ASP.NET缓存方法并提供示例代码。 2. ASP.NET缓存方法分析 ASP.NET框架提供的缓存方法主要有以下几种: (1)HttpContext.Cache HttpCo…

    C# 2023年5月31日
    00
  • C#实现下载网页HTML源码的方法

    下面是“C#实现下载网页HTML源码的方法”的完整攻略,具体流程如下: 1. 发送HTTP请求 使用C#自带的WebRequest类向目标网址发送HTTP请求,获取服务器响应。HTTP请求的方式分为GET和POST,这里以GET为例,构造请求如下: string url = "http://www.example.com"; WebReq…

    C# 2023年6月3日
    00
  • C# Razor语法规则

    C# Razor语法规则是一种在ASP.NET Core中使用Razor模板引擎进行动态HTML视图编写的语法规则。下面是详细的攻略。 Razor语法介绍 Razor语法是一种和HTML混合在一起的文本模板渲染引擎。可以方便地集成C#代码,在执行时被解析为可执行的C#代码,并且能够自动地在视图中生成HTML标记。 Razor特定字符 以下是Razor特定的示…

    C# 2023年5月31日
    00
  • ASP.NET Core中的Blazor组件介绍

    ASP.NET Core中的Blazor组件介绍 Blazor是一种使用C#和.NET构建Web应用程序的新兴技术。它允许开发人员使用C#编写客户端代码,并在浏览器中运行。Blazor组件是Blazor应用程序的基本构建块,本攻略将介绍ASP.NET Core中的Blazor组件。 Blazor组件 Blazor组件是Blazor应用程序的基本构建块。它们是…

    C# 2023年5月17日
    00
  • Asp.Net Core使用swagger生成api文档的完整步骤

    在ASP.NET Core中,可以使用Swagger来生成API文档。本攻略将深入探讨如何使用Swagger生成API文档,并提供两个示例说明。 使用Swagger生成API文档 使用Swagger生成API文档的步骤如下: 1. 添加Swashbuckle.AspNetCore包 我们需要添加Swashbuckle.AspNetCore包来使用Swagge…

    C# 2023年5月17日
    00
  • 如何使用正则表达式判断邮箱(以C#为例)

    正则表达式是一种强大的匹配工具,在C#中使用正则表达式可以很方便地判断邮件地址的有效性。下面是判断邮箱的完整攻略: 正则表达式的语法 要想使用正则表达式来判断邮箱,需要掌握基本的正则表达式语法。以下是一些常用的正则表达式符号: ^ : 匹配字符串的开始位置。 $ : 匹配字符串的结束位置。 [] : 匹配方括号中出现的任意一个字符。 * : 匹配前面的字符零…

    C# 2023年6月3日
    00
  • C#微信开发之自定义菜单管理

    C#微信开发之自定义菜单管理 简介 自定义菜单是公众号开发中最基本的功能之一,通过自定义菜单可以为用户提供更便捷的交互方式。本文将详细讲解使用C#开发微信自定义菜单的流程和方法。 准备工作 使用C#开发微信自定义菜单需要先完成以下准备工作: 成为微信公众号的开发者,开通公众号的开发权限。 在微信公众平台申请获得appid和appsecret两个关键信息。 在…

    C# 2023年5月31日
    00
  • C#的3DES加密解密算法实例代码

    让我为您详细讲解一下关于C#的3DES加密解密算法实例代码的完整攻略。 什么是3DES加密解密算法? 3DES(即Triple DES)是一种对称加密算法,它是基于DES算法的一个改进版本。3DES算法采用三次DES加密操作来增强数据加密的强度。它的密钥长度为168位,远高于DES算法的56位,因此在安全性方面比DES算法更高。 如何在C#中实现3DES的加…

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