2015-11-28 5 views
1

Я выполняю подсчет сортировки Но что-то не так с моим кодом Я новичок в программировании Пожалуйста, помогите мне найти ошибку. Я имплантирую его шаг за шагом.Подсчет сортировки в 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(); 
      } 
     } 
    } 

Желаемая Выход

00

Но выход из моей программы

000120457809 
+0

[Debugging, отладки, отладки ..] (https://en.wikipedia.org/wiki/Debugging) –

+0

Почему так много переменных? это просто делает вещи запутанными и сложнее отлаживать. также подсчет сортировки не имеет вложенного цикла. –

+0

Извините за слишком много переменных Но я застрял на этом с 1 дня –

ответ

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

+2

Приятная находка, но я думаю, что код OP - это 'b [j] = b [j] '(без' -1') –

+2

Да Я добавляю '-1' на свой собственный –

+0

lol. это копировать пасту! Кстати, вы поняли это правильно. –

1

Нормальные сортировочные ваши две петли должны выглядеть следующим образом

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

операционная система не запрашивала способ сортировки пузыря. –