首页 > 编程语言 >C#实现所有经典排序算法

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

时间:2023-06-30 18:01:02浏览次数:40  
标签:Sort arr C# list int 算法 new array 排序


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

//选择排序   
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);   
    }   
}   
//冒泡排序   
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);   
  
    }   
}   
//快速排序   
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]);   
    }   
}   
//插入排序   
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);    
    }   
}   
//希尔排序   
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);    
  
    }   
}

作者:古道轻风,

标签:Sort,arr,C#,list,int,算法,new,array,排序
From: https://blog.51cto.com/chunyangi/6592554

相关文章

  • vane 一个适用于前端打工人的全栈框架,nodejs+vue3+typescript
    vane写这个的初衷是因为每次用node写接口的时候总是需要一些写大一堆的东西,也有些人把很多接口都放在一个js文件内,看起来很是杂乱,后来用到nuxt写的时候,感觉用文件名来命名接口路径很是方便,无论是query参数还是params参数,都可以通过文件名来命名,也可以通过文件夹层级......
  • clickHouse中实现类似lag和lead的函数
     clickhouse中的lead和lag实现有多种方法,在标准的SQL中使用的windowsfunction即可实现。示例数据:CREATETABLEllexample(gInt32,aDate)ENGINE=Memory;INSERTINTOllexampleSELECTnumber%3,toDate('2020-01-01')+numberFROMnumbers(10......
  • laytpl( Layui 的一款轻量 JavaScript 模板引擎)html标签点击事件传递多参
     <scripttype="text/html"id="aobjectvalue_temp"><spanclass="us-font-blue"style="cursor:pointer"onclick="seeinfo('{{d.aobjectkey}}','{{d.atype}}')">[资源详情]</spa......
  • Nacos的服务注册表结构是怎样的
    回答Nacos采用了数据分级存储模型,最外层是Namespace,用来隔离环境。然后是Group,用来对服务分组。接下来就是服务(Service)了,一个服务包含多个实例,但是可能处于不同的机房,因此Service下有多个集群(Cluster),Cluster下是不同的实例(Instance)。对应到Java代码中,Nacos采用了多层的Map结构......
  • Oracle向包里添加新存储过程的流程
    本次使用的工具是Plsql。一般情况下修改包里的存储过程只需要在Packages找到需要修改的包,右键EditSpec即可。但是假如要重新添加一条新的存储过程,使用上诉步骤之后,后台调用新存储过程的时候会报错,因为找不到新创建的存储过程,而且此时右键View包的时候,也找不到声明的存......
  • 【c++基础】位域结构体
    前言code#include<iostream>typedefstruct{unsignedinta:5;unsignedintb:3;}tBits;intmain(){tBitsaa;aa.a=205;//11001101aa.b=89;//01011001std::cout<<"a:"<<aa.a<<......
  • 一探究竟!天翼云2023MWC展区“亮”了!
    6月28日,2023MWC上海世界移动通信大会(简称“MWC上海”)在上海新国际博览中心启幕。中国电信开设“数智万融畅享未来”主题展区,从科技创新、安全筑防及服务赋能三大核心板块56项科数成就入手,全方位展示中国电信新技术、新产品以及新一代信息智能数字化解决方案。其中,中国电信天翼云......
  • element-ui 日期时间选择框picker-options如何禁用时间范围( 多个时间范围判断 )
    1.element-ui算是我们在开发中用到最多的pc端ui框架,今天公司正好有一个需要用到date-picker的日期插件2.需求是这样的:共有三个时间选择器,后一个时间选择器要结合前面一个时间的范围值,去做时间判断,禁用前面所选时间,保证不可有重复时间  结果是......
  • 浅谈一下c#多线程编程
    概念线程:线程是操作系统能够进行运算调度的最小单位,被包含在进程之中,是进程中的实际运作单位。同步:一定要等任务执行完了,得到结果,才执行下一个任务。如果程序执行耗时操作时会阻塞线程。应用场景UI与I/O:UI发出I/O操作,I/O操作是费时任务计算密集型工作(CPU-boun......
  • mysql 如何 使用一个字符串来进行排序
    如果想进行对一个字段进行排序,但是这个字段却不是int类型,适应varchar类型怎么办呢?常用的方式:给字符字段加上0,举例:1:假设scoreRate是一个varchar类型,并且值是一个百分(90%)的数据格式.要求:请获取scoreRate值最高的一条数据:sql:select*fromresultTableorderbyreplace(sco......