首页 > 其他 > 详细

非基于比较的排序算法之一:计数排序

时间:2014-04-28 17:14:51      阅读:692      评论:0      收藏:0      [点我收藏+]

计数排序(Counting sort)是一种稳定的排序算法。计数排序使用一个额外的数组C,其中第i个元素是待排序数组A中值小于等于i的元素的个数。然后根据数组C来将A中的元素排到正确的位置。

限制:所有值得取值范围不能太大,并且需要知道确切的取值范围。本算法需要的辅助空间要求较高。

当输入的元素是 n 个 0 到 k 之间的整数时,它的运行时间是 Θ(n + k)。计数排序不是比较排序,排序的速度快于任何比较排序算法。

现在给出C#实现的计数排序(counting sort)

bubuko.com,布布扣
public void Sort(int[] array, int startIndex, int endIndex, int minValue, int maxValue)
        {
            int[] countingArray = new int[maxValue - minValue + 1];
            for (int i = startIndex; i <= endIndex; i++)
            {
                countingArray[array[i] - minValue]++;
            }

            for (int i = 1; i < countingArray.Length; i++)
            {
                countingArray[i] = countingArray[i] + countingArray[i - 1];
            }
            //取结果放于新数组sortedArray
            int[] sortedArray = new int[endIndex - startIndex + 1];
            for (int i = endIndex; i >= startIndex; i--)
            {
                //从后到前扫描原始array数组才能保证排序的稳定性
                //设array[i]=a,则设countingArray[a-minValue]=aIndex,aIndex表示在排序好的数组中a是第aIndex个,在数组中的下标应为aIndex-1
                //将a放到sortedArray[aIndex-1].countingArray[a]数值减一表示等于a的其它数值的位置向前步进1个位置。
                sortedArray[(countingArray[array[i] - minValue]--) - 1] = array[i];
            }
            for (int i = 0; i < sortedArray.Length; i++)
            {
                array[i + startIndex] = sortedArray[i];
            }
        }
bubuko.com,布布扣

 

作者:Andy Zeng

欢迎任何形式的转载,但请务必注明出处。

http://www.cnblogs.com/andyzeng/p/3695306.html

非基于比较的排序算法之一:计数排序,布布扣,bubuko.com

非基于比较的排序算法之一:计数排序

原文:http://www.cnblogs.com/andyzeng/p/3695306.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!