2014-11-20 2 views
-1

Я следовал алгоритму подсчета и реализовал его на C++, но результат не соответствует требованиям. Это должен вывести 35 60 81 98.Подсчет алгоритма сортировки в C++ незначительной ошибке

Алгоритм подсчета

1. for i=0 to n-1 do 
2.  count[i] = 0 
3. end for 
4. for i =0 to n-2 do 
5.  for j = i+1 to n-1 do 
6.  if A[i] < A[j] 
7.   count[j] = count[j] +1 
8.  else count[i] = count[i] +1 
9. end if 
10. end for 
11. end for 
12. for I = 0 to n-1 
13. S[count[i]] = A[i] 
14. End for 
15. Return S  

Реализован код

int main(){ 
    int A[4] = {60, 35, 81, 98}; 
    int count[4], S[5]; 
    int i, n=4, j; 

    system("cls"); 
    for(i=0; i<n-1; i++){ 
      count[i] = 0; 
    } 

    for(i=0; i<n-2; i++){ 
      for(j=i+1; j<n-1; j++){ 
         if(A[i] < A[j]){ 
           count[j] = count[j] + 1; 
         }else{ 
           count[i] = count[i] + 1; 
         } 
      } 
    } 

    for(i=0; i<n-1; i++){ 
      S[count[i]] = A[i];    
    } 

    for(i=0; i<n; i++){ 
      cout << S[i] << endl; 
    } 


    getchar(); 
} 

Выход

Где я ошибся? Последнее число неверно. Пожалуйста помоги!

+0

похоже, что вы теряете последнюю запись, которая заменяется на мусорную ценность! – CinCout

+0

@binaryBaBa да, это так. Какие-либо предложения? – Moorani

+0

'0 до n-1' является инклюзивным диапазоном. В C вы используете полуоткрытые диапазоны, поэтому условие становится 'i

ответ

0

У вас была ошибка в разделе. Затем я отредактировал ваш код и отредактировал его версию:

for (i = 0; i<n; i++){ 
    count[i] = 0; 
} 
//if i<n in bellow for no problem occure 

for (i = 0; i<n -1; i++){ 
    for (j = i + 1; j<n; j++){ 
     if (A[i] < A[j]){ 
      count[j] = count[j] + 1; 
     } 
     else{ 
      count[i] = count[i] + 1; 
     } 
    } 
} 

for (i = 0; i<n ; i++){ 
    S[count[i]] = A[i]; 
} 

for (i = 0; i<n; i++){ 
    cout << S[i] << endl; 
} 
+0

благодарит брата за усилия. – Moorani

0
for(i=0; i<n-1; i++){ 
      for(j=i+1; j<n; j++){ 
         if(A[i] < A[j]){ 
           count[j] = count[j] + 1; 
         }else{ 
           count[i] = count[i] + 1; 
         } 
      } 
    } 

Это то, что вы должны использовать!

Обратите внимание, что я бег как петли еще один раз (также рассмотреть последний элемент массива, который в противном случае теряется!)

Кроме того, при заполнении отсортированного массива:

for(i=0; i<n; i++){ 
      S[count[i]] = A[i];    
    } 
+1

Спасибо за быстрый ответ :) – Moorani

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