计数排序在C#中的实现

本文关键字:实现 排序 | 更新日期: 2023-09-27 18:24:57

我正在实现计数排序,但我的代码出现了一些问题我是编程新手,请帮我找出一个错误。我正在一步一步地实施它。

    namespace ConsoleApplication1
    {
        class Program
        {
            public static int[] a = { 0,0,0,5,4,8,9,9,7,3, 3, 2, 1 };
            public static void Sorting()
            {
                int j = 0, i = 0, smallestvalue = 0, largestvalue = 0, n = a.Length, lengthof_B = 0, temp = 0, anothersmallestvalue;
                smallestvalue = largestvalue = a[0];
                for (i = 0; i < n; i++)
                {
                    if (smallestvalue > a[i])
                    {
                        smallestvalue = a[i];
                    }
                    else if (largestvalue < a[i])
                    {
                        largestvalue = a[i];
                    }
                }
                int x = anothersmallestvalue = smallestvalue;
                lengthof_B = largestvalue - smallestvalue + 1;
                int[] b = new int[lengthof_B];
                for (i = 0; i < lengthof_B && smallestvalue <= largestvalue; i++)
                {
                    for (j = 0; j < n; j++)
                    {
                        if (smallestvalue == a[j])
                        {
                            b[i] = b[i] + 1;
                        }
                    }
                    b[i] = temp + b[i];
                    temp = b[i];
                    smallestvalue++;
                }
                int[] c = new int[a.Length];
                                                // I think error here 
                for (i = n - 1; i >= 0; i--)
                {
                    anothersmallestvalue = x;
                    for (j = 0; j <= lengthof_B ; j++)        
                    {
                        if (a[i] == anothersmallestvalue)
                        {
                            temp = b[j];
                            c[temp - 1] = anothersmallestvalue;
                            b[j] = b[j];
                        }
                        anothersmallestvalue++;
                    }
                }            
                for (i = 0; i < c.Length; i++)
                {
                    Console.WriteLine("c[i] : " + c[i]);
                }
            }
        }
        class Demo
        {
            static void Main(string[] args)
            {
                Program.Sorting();
                Console.ReadLine();
            }
        }
    }

所需输出为

000123457899

但我程序的输出是

000120457809

计数排序在C#中的实现

This Is Your Code Here我发现了一个错误。

你的代码太复杂了,请再检查一遍你的代码。

for (i = n - 1; i >= 0; i--)
                {
                    anothersmallestvalue = x;
                    for (j = 0; j <= lengthof_B ; j++)        
                    {
                        if (a[i] == anothersmallestvalue)
                        {
                            temp = b[j];
                            c[temp - 1] = anothersmallestvalue;
                            b[j] = b[j] -1 ;// Possible Mistake I think here
                        }
                        anothersmallestvalue++;
                    }
                }            

这里描述并展示了非常简单和时尚的方式。

en.wikipedia.org/wiki/Counting_sort#The_algorithm

正常排序您的两个循环应该看起来像这个

for (i = 0; i < lengthof_B - 1; i++)
{
    for (j = i + 1; j < lengthof_B; j++)
    {
    }
}​