C#实现所有经典排序算法

C#经典排序算法的实现与应用 htmltable {th, td {th {pre {简介:排序算法在编程中是数据处理的关键,本文介绍C#实现的五种经典排序算法:冒泡排序、快速排序、插入排序、选择排序和归并排序。每种算法都有其优势和适用场景,理解这些算法的工作原理和条件对提升编程能力至关重要。本文不仅解释了这些算法的原理,还提供了C#中的实现细节,并探讨了在不同数据规模和需求下的选择标准。 阅读详情

转自: http://blog.youkuaiyun.com/gisfarmer/article/details/4152345

C#实现所有经典排序算法
1、选择排序


class SelectionSorter    
{    
    
private int min;    
    
public void Sort(int[] arr)    
    {    
        
for (int i = 0; i < arr.Length - 1; ++i)    
        {    
            min 
= i;    
            
for (int j = i + 1; j < arr.Length; ++j)    
            {    
                
if (arr[j] < arr[min])    
                    min 
= j;    
            }    
            
int t = arr[min];    
            arr[min] 
= arr[i];    
            arr[i] 
= t;    
        }    
    }    
    
static void Main(string[] args)    
    {    
        
int[] array = new int[] { 1, 5, 3, 6, 10, 55, 9, 2, 87, 12, 34, 75, 33, 47 };    
        SelectionSorter s 
= new SelectionSorter();    
        s.Sort(array);    
        
foreach (int m in array)    
            Console.WriteLine(
"{0}", m);    
    }    
} 


2、冒泡排序


class EbullitionSorter    
{    
    
public void Sort(int[] arr)    
    {    
        
int i, j, temp;    
        
bool done = false;    
        j 
= 1;    
        
while ((j < arr.Length) && (!done))//判断长度    
        {    
            done 
= true;    
            
for (i = 0; i < arr.Length - j; i++)    
            {    
                
if (arr[i] > arr[i + 1])    
                {    
                    done 
= false;    
                    temp 
= arr[i];    
                    arr[i] 
= arr[i + 1];//交换数据    
                    arr[i + 1] = temp;    
                }    
            }    
            j
++;    
        }    
    }    
   
    
static void Main(string[] args)    
    {    
        
int[] array = new int[] { 1, 5, 3, 6, 10, 55, 9, 2, 87, 12, 34, 75, 33, 47 };    
        EbullitionSorter e 
= new EbullitionSorter ();    
        e.Sort(array);    
        
foreach (int m in array)    
            Console.WriteLine(
"{0}", m);    
   
    }    
} 


3、快速排序


class QuickSorter    
{    
    
private void swap(ref int l, ref int r)    
    {    
        
int temp;    
        temp 
= l;    
        l 
= r;    
        r 
= temp;    
    }    
    
public void Sort(int[] list, int low, int high)    
    {    
        
int pivot;//存储分支点    
        int l, r;    
        
int mid;    
        
if (high <= low)    
            
return;    
        
else if (high == low + 1)    
        {    
            
if (list[low] > list[high])    
                swap(
ref list[low], ref list[high]);    
            
return;    
        }    
        mid 
= (low + high) >> 1;    
        pivot 
= list[mid];    
        swap(
ref list[low], ref list[mid]);    
        l 
= low + 1;    
        r 
= high;    
        
do   
        {    
        
while (l <= r && list[l] < pivot)    
            l
++;    
        
while (list[r] >= pivot)    
            r
--;    
            
if (l < r)    
                swap(
ref list[l], ref list[r]);    
        } 
while (l < r);    
        list[low] 
= list[r];    
        list[r] 
= pivot;    
        
if (low + 1 < r)    
            Sort(list, low, r 
- 1);    
        
if (r + 1 < high)    
            Sort(list, r 
+ 1, high);    
    }    
   
    
static void Main(string[] args)    
    {    
        
int[] iArrary = new int[] { 1, 5, 3, 6, 10, 55, 9, 2, 87, 12, 34, 75, 33, 47 };    
        QuickSorter q 
= new QuickSorter();    
        q.Sort(iArrary, 
0, 13);    
        
for (int m = 0; m <= 13; m++)    
            Console.WriteLine(
"{0}", iArrary[m]);    
    }    
}    


4、插入排序


public class InsertionSorter    
{    
    
public void Sort(int[] arr)    
    {    
        
for (int i = 1; i < arr.Length; i++)    
        {    
            
int t = arr[i];    
            
int j = i;    
            
while ((j > 0) && (arr[j - 1] > t))    
            {    
                arr[j] 
= arr[j - 1];//交换顺序    
                --j;    
            }    
            arr[j] 
= t;    
        }    
    }    
    
static void Main(string[] args)    
    {    
        
int[] array = new int[] { 1, 5, 3, 6, 10, 55, 9, 2, 87, 12, 34, 75, 33, 47 };    
        InsertionSorter i 
= new InsertionSorter();    
        i.Sort(array);    
        
foreach (int m in array)    
            Console.WriteLine(
"{0}", m);     
    }    
}    


5、希尔排序 


public class ShellSorter    
{    
    
public void Sort(int[] arr)    
    {    
        
int inc;    
        
for (inc = 1; inc <= arr.Length / 9; inc = 3 * inc + 1) ;    
        
for (; inc > 0; inc /= 3)    
        {    
            
for (int i = inc + 1; i <= arr.Length; i += inc)    
            {    
                
int t = arr[i - 1];    
                
int j = i;    
                
while ((j > inc) && (arr[j - inc - 1] > t))    
                {    
                    arr[j 
- 1] = arr[j - inc - 1];//交换数据    
                    j -= inc;    
                }    
                arr[j 
- 1] = t;    
            }    
        }    
    }    
   
    
static void Main(string[] args)    
    {    
        
int[] array = new int[] { 1, 5, 3, 6, 10, 55, 9, 2, 87, 12, 34, 75, 33, 47 };    
        ShellSorter s 
= new ShellSorter();    
        s.Sort(array);    
        
foreach (int m in array)    
            Console.WriteLine(
"{0}", m);     
    }    
}   
几种简单算法的实现(CSharp) 数据结构中,最简单的几种算法实现(网上有很多这样的资源),本资源使用C#编写,加入了泛型方法。如果想了解详细的算法分析,请参考相关的算法和数据结构类书籍。 立即下载

相关推荐

在C#中轻松应用DataTables.js的排序

在C#中应用从DataTables.js参数进行排序的助手方法

【算法】C#实现经典排序算法总结(附动图)

自行整理的C#常见算法笔记。

好学若饥,谦卑若愚。 5248

Meta-World环境实战解析:pick-place-v2中的状态观测与动作控制

本文深入解析了Meta-World中pick-place-v2环境的强化学习实战要点。文章详细拆解了39维状态观测向量的构成与意义,包括机械臂末端、物体位置及目标坐标,并揭示了默认部分可观测设置的潜在影响。同时,阐述了4维动作空间的控制逻辑与奖励函数的分阶段设计,为训练高效稳定的抓放策略提供了核心指导与实用调优技巧。

weixin_29184371的博客 77

C#经典十大排序算法(完结)

C#冒泡排序算法简介冒泡排序算法是一种基础的排序算法,它的实现原理比较简单。核心思想是通过相邻元素的比较和交换来将最大(或最小)的元素逐步"冒泡"到数列的末尾。详细文章描述https://mp.weixin.qq.com/s/z_LPZ6QUFNJcwaEw_H5qbQ代码实现///<summary> ///递归方式实现冒泡排序 ///</s...

dotNET跨平台 234

C#实现跨域访问共享文件夹的账号密码验证方案

本文详细介绍了在C#中实现跨域访问共享文件夹的账号密码验证方案。通过调用Windows API LogonUser函数,结合LOGON32_LOGON_NEW_CREDENTIALS登录类型,可安全模拟指定用户身份,有效解决工作组与域环境间的文件共享访问难题。文章提供了完整的工具类封装、多种实战场景示例及详细的错误排查指南。

pea55的博客 539

Mac无管理员权限安装NVM全攻略(附国内镜像加速)

本文详细介绍了在Mac电脑无管理员权限的情况下,如何通过Git克隆方式安装Node版本管理工具NVM,并配置国内镜像源以加速下载。攻略涵盖环境检查、安装步骤、Shell环境变量配置、镜像加速设置以及常用命令和常见问题解决方案,帮助开发者绕过权限限制,高效管理Node.js版本。

weixin_29296241的博客 489

C# 算法(一)

C#实现递归算法、斐波那契数列、汉诺塔问题(分治算法)、部分背包问题(贪心算法)、01背包问题(动态规划算法)、迷宫问题(回溯算法)

qq_35634418的博客 1590

Windows——Nessus安装(无限制)

Nessus手把手图文安装,解除ip限制~

网安小白的博客 9448

C#之十大排序算法

No.1冒泡排序 冒泡排序无疑是最为出名的排序算法之一,从序列的一端开始往另一端冒泡(你可以从左往右冒泡,也可以从右往左冒泡,看心情),依次比较相邻的两个数的大小(到底是比大还是比小也看你心情) 结构简单易于理解 时间复杂度O(n2) C#的内置排序函数使用的并非冒泡而是快排 using System; namespace 排序 { class Program { ...

视觉软件 3972

别再浪费NFC了!手把手教你用Android手机模拟门禁卡(Mifare Classic破解教程)

本文深入探讨Android NFC技术的核心原理与创新应用,教你如何利用手机模拟门禁卡(Mifare Classic破解教程),解锁智能生活的无限可能。涵盖NFC标签类型解析、HCE开发实战及安全实践,让你的Android设备成为数字生活的万能钥匙。

weixin_29239661的博客 230

视觉SLAM十四讲习题答案

阅读《视觉SLAM十四讲》中遇到的问题及习题资源整理,或为原创,或来自网络,如有问题请与我联系,会在第一时间加以修正。 后来自己写完看到另一位写的博客,相形见绌,大家可以互相结合的看。 第一讲 1.线性方程的解:转载自宋洋鹏(youngpan1101),了解线性代数可关注B站3Blue1Brown,以及线性代数,知乎上有其精细笔记。 2.高斯分布参考这位博主Johnny-Cuii的文章,具体...

INFINITE POSSIBILITIES 1万+

最短路径—Dijkstra算法(C#)

前言 : 因为之前刚写过最小生成树算法,刚开始看到Dijkstra算法的时候,因为要求各点到源点的最短距离,会想着直接从最小生成树的也是每找到最短的距离点加进来,但是后面仔细想了下,又翻了下定义,得到 最短路径是一个图中2个点的最短距离。 最小生成树是连接所有的点的路径最短,但是不一定是任意两点的距离最小,例如: 最小生成树是:A->B->C AC距离是2+2=...

潇逗 1万+

【从零开始学习 UVM】1.2、UVM 概述 —— UVM Installation(UVM 安装)

【从零开始学习 UVM】1.2、UVM 概述 —— UVM Installation(UVM 安装)

努力,加油每一天鸭~ 1944

C#实现所有经典排序算法汇总

C#实现所有经典排序算法1、选择排序 选择排序class SelectionSorter    {        private int min;        public void Sort(int[] arr)        {            for (int i = 0; i         {                min = i;                for

cuiqilong的专栏 476

(9-2)离线强化学习:离线强化学习的主流方法

本文介绍了三种离线强化学习的主流约束策略优化方法:BCQ、CQL和Fisher-BRC,并通过CartPole环境进行性能比较。BCQ利用生成模型约束动作选择并引入扰动网络;CQL通过正则化Q值抑制对未见状态-动作对的高估;Fisher-BRC使用Fisher散度正则化策略分布。实验结果表明,三种方法各有优势,其中CQL表现最为稳定。文章还指出,为获得更好的性能,需要更大的数据集和更长的训练轮次。这些方法通过限制策略优化范围,有效提高了离线强化学习的稳定性和泛化能力。

码农三叔 1537

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【共享】C#实现所有经典排序算法

这里需要知道dapo的reward_manager_cls 具体是什么,因为reward需要batch数据才能计算,因此对于reward manager咱们先按下不表(其实dapo对应的reward_manager_cls是在verl/verl/workers/reward_manager/dapo.py),先去dapo_ray_trainer.py看一下batch是怎么采样的,再回来仔细阅读reward的具体计算方法。# max_num_gen_batches是最多可以使用的gen_batch的个数。

IfB1XRsdh的博客 403

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

c#实现所有经典排序算法

c#实现所有经典排序算法//选择排序  class selectionsorter  {      private int min;      public void sort(int[] arr)      {          for (int i = 0; i < arr.length - 1; ++i)          {           

blog之antyi 484

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

C#实现所有经典排序算法[转载]

原文出处:http://www.cnblogs.com/dreamof/archive/2009/05/05/1450058.html C#实现所有经典排序算法1、选择排序 选择排序classSelectionSorter{privateintmin;publicvoidSort(int[]arr){...

a443407564的博客 119

C#实现经典排序算法

1、选择排序 //选择排序class SelectionSorter { private int min; public void Sort(int[] arr) { for (int i = 0; i < arr.Length - 1; ++i) {

清山博客 1750
上一篇: TransformDirection从自身坐标到世界坐标变换方向
下一篇: C#中out和ref之间的区别
我是一纸巾
博客等级 码龄12年 14粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值