2013-08-25 3 views
-4

Я написал этот код для сортировки элементов массива с использованием сортировки counting. Программа компилируется и запускается, но не дает правильного вывода. Я ожидаю, что элементы будут отсортированы в неубывающем порядке. Результат, который я получаю, сортируется в неубывающем порядке, но значения не совпадают с тем, что у меня был вход. Я проверял код много раз, но я не могу обнаружить ошибку. Пожалуйста помоги.Подсчет Сортировка программы

import java.io.*; 

public class Main { 
public static void main(String aa[]) { 

    try { 
     BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); 

     int t = Integer.parseInt(input.readLine()); 
     int a [] = new int[t]; 
     int c [] = new int[t]; 
     int max = 0; 

     if(t<=1000000) { 

      for(int i = 0; i<t; i++) { 
       int n = Integer.parseInt(input.readLine()); 
       if(n>=0 && n<=1000000) { 
        a[i] = n; 
        if(n>max) max = n; 
       } 
      } 

      int b[] = new int[max+1]; 

      for(int i = 0; i<max+1; i++) 
       b[i] = 0; 

      for(int i = 0; i<t; i++) 
       b[a[i]] += 1; 

      for(int i = 1; i<max+1; i++) 
       b[i] += b[i-1]; 

      for (int i = t-1; i>=0; i--) { 
       c[b[a[i]]] = a[i]; 
       b[a[i]]--; 
      } 

      for (int i = 0; i<t; i++) 
       System.out.println(c[i]); 

     } 
     else 
      System.exit(0); 
    } catch (Exception e) {System.out.println(e);} 
    } 
} 
+3

Что вы ожидаете? Что это действительно дает вам? –

+1

Привет. Просить людей обнаружить ошибки в коде не особенно продуктивно. Вы должны использовать отладчик (или добавить заявления печати), чтобы изолировать проблему, отслеживая ход вашей программы и сравнивая ее с тем, что вы ожидаете. Как только двое расходятся, вы нашли свою проблему. (И затем, если необходимо, вы должны построить [минимальный тестовый сценарий] (http://sscce.org).) –

+0

@JeroenIngelbrecht Я ожидаю, что элементы будут отсортированы в неубывающем порядке. Результат, который я получаю, сортируется в неубывающем порядке, но значения не совпадают с тем, что у меня был вход. –

ответ

3

Вы правы в том месте, где вы ошибаетесь. Изменение:

for (int i = t-1; i>=0; i--) { 
    c[b[a[i]]] = a[i]; 
    b[a[i]]--; 
} 

в:

for (int i = 0; i<t; ++i) { 
    c[b[a[i]]-1] = a[i]; 
    --b[a[i]]; 
} 

И он должен работать нормально для тестовых данных.

+0

Работал! Большое спасибо! Я рад, что по крайней мере кто-то потрудился ответить на вопрос. –

2

Вы почти правильно поняли. Измените следующие строки (отключены на одну ошибку)

for (int i = 0; i < t; i++) { 
    c[b[a[i]] - 1] = a[i]; 
    b[a[i]]--; 
} 
+0

Thnaks! Я ценю вашу помощь. –

Смежные вопросы