计算C#中的排序实现

时间:2015-11-28 17:08:58

标签: c#

我正在实现计数排序但是我的代码有些问题 我是编程新手请帮我找错。 我正在逐步实施它。

    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

2 个答案:

答案 0 :(得分:4)

这是你的代码在这里我发现了一个错误。

您的代码过于复杂请再次阅读您的代码。

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

答案 1 :(得分:1)

正常排序你的两个循环应该是这样的

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