2015-04-20 2 views
1
#include <iostream> 
using namespace std; 
int main() 
{ 
    int i,sum=0,n; 
    int a[10]; 
    float avg; 
     cout<<"Enter how many numbers you want "; 
     cin>>n; 
     if (n>10) 
     n=10; 
      cout<<"Enter the numbers" << endl; 
       for (i=0;i<n;i++) 
        cin>>a[i]; 
       for (i=0;i<n;i++) 
        { 
         sum=sum+a[i]; 
        } 
         avg=sum/n; 
     cout<<"sum of array elements "<<sum << endl; 
     cout<<"average of array elements " <<avg << endl; 

int temp; 
    for (int i =0; i<n; i++) 
    { 
     for (int j=1; j<n; j++) 
     { 
      if (a[i] > a[j]) 
      { 
       temp = a[i]; 
       a[i]=a[j]; 
       a[j]=temp; 
      } 
     } 
    } 
cout << "The numbers in ascending order are:" << endl; 

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

При запуске этой программы номера распечатываются в другом порядке.Зачем это не печатать цифры в порядке возрастания

, если я использую число 1 2 3 4 5. они печатают, как 1 5 4 3 2

все остальное работает нормально. Как исправить эту ошибку?

+1

Ваш алгоритм сортировки некорректен. Что произойдет, если, например, вы сравниваете элементы 'a [4]' и 'a [1]'? –

+0

Как я могу сделать так, чтобы он сравнивал все числа? – user3138302

+0

Этот вид странной сортировки вставки не работает правильно, вы можете легко преобразовать его в сортировку пузыря – maraca

ответ

2

Неверная реализация вида. Так как идея рода, чтобы найти i -го наименьшее число на каждом шаге, внутренний цикл должен начинаться i+1, не 1:

for (int j=i+1; j<n; j++) 

Demo.

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