C#算法之计数排序

        算法释义:计数排序是一种非基于比较的排序算法,它不依赖于比较操作来确定元素的顺序,而是通过键值索引直接确定元素的输出位置。计数排序适用于一定范围内的整数排序。为什么说是一定范围之内呢?原因如下:计数排序的复杂度为Ο(n+k)(其中k是整数的范围),这是一种牺牲空间换取时间的做法,而且当O(k)>O(n*log(n))的时候其效率反而不如基于比较的排序。

        这个算法不太常用,基本的示例代码如下:

    public static void Main()
    {
        int[] array = { 3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5 };
        int[] sortedArray = Countsort(array);
    }


    public static int[] Countsort(int[] arr)
    {
        int min = arr.Min();
        int max = arr.Max();
        int range = max - min + 1;
 
        int[] count = new int[range];
        int[] sorted = new int[arr.Length];
 
        foreach (int i in arr)
        {
            count[i - min]++;
        }
 
        for (int i = 1; i < count.Length; i++)
        {
            count[i] += count[i - 1];
        }
 
        for (int i = arr.Length - 1; i >= 0; i--)
        {
            sorted[count[arr[i] - min] - 1] = arr[i];
            count[arr[i] - min]--;
        }
 
        return sorted;
    }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值