1

Тема: Сортування масивів методом вибору мовою С

Добрий вечір! *ROSE*
Є питання. :[
Дано масив а, який потрібно відсортувати за незростанням алгоритмом вибору. %)
Я написала код, але чомусь результат сортування мені не подобається ]:->

#include <stdio.h>
int main()
{
    float a[15]={2,6,7.5,4.1,5,2.3,6.2,3,1.5,4.9,0.3,12,3,14,1.4};
    int max=0;
    float buf=0;
    for(int i=0;i<15;i++){
        for(int j=i;j<15;j++){
            if(a[j]>a[max]){
              max=j;  
            }
              if(i!=max){
              buf=a[i];
              a[i]=a[max];
              a[max]=buf;   
            }
            
        }
    }
    for(int i=0;i<15;i++){
      printf("%.1f ", a[i]);  
    }
    return 0;
}

А тут результат:

7.5 6.2 14.0 6.0 12.0 3.0 5.0 3.0 4.9 2.3 4.1 1.5 2.0 1.4 0.3 

.
Хтось розуміє, де в мене помилка? :)

2

Re: Сортування масивів методом вибору мовою С

Вирівняйте код. Це якраз та ситуація, де вирівнювання коду рятує.

Подякували: Lata1

3

Re: Сортування масивів методом вибору мовою С

А хіба він не вирівняний зараз? :D

4

Re: Сортування масивів методом вибору мовою С

Lata написав:

А хіба він не вирівняний зараз? :D

ні, як відкриваєте новий блок виконання, наприклад при операторі розгалуження (іф) або циклі, зміщуєте на 2 пробіли вправо (або табуляцію). Кід глянув одним оком, певно тут у вас фігурних скобочок не вистачає, чи вони не в тих місцях.

Подякували: Lata1

5

Re: Сортування масивів методом вибору мовою С

#include <stdio.h>
int main()
{
    float a[15]={2,6,7.5,4.1,5,2.3,6.2,3,1.5,4.9,0.3,12,3,14,1.4};
    int max=0;
    float buf=0;
    for(int i=0;i<15;i++){
        for(int j=i;j<15;j++){
            if(a[j]>a[max]){
              max=j;  
            }
              if(i!=max){
              buf=a[i];
              a[i]=a[max];
              a[max]=buf;   
              }
        }
    }
    
    for(int i=0;i<15;i++){
      printf("%.1f ", a[i]);  
    }
    return 0;
}

фігурних дужок вистачає. Відступи теж робила. Може, не збереглося під час копіювання і вставлення. Причина не в цьому.

6 Востаннє редагувалося Lata (03.12.2020 22:03:05)

Re: Сортування масивів методом вибору мовою С

Даю посилання.
https://onlinegdb.com/SktkUnIiD
<script src="//onlinegdb.com/em … script>

7

Re: Сортування масивів методом вибору мовою С

По Вашому питанню не знаю,
а от по посиланню, яке Ви дали, хотів додати printf() для відладки
і витратив впусту 30 хв свого життя,
бо компілятор  просить замінити %f  на %d,
міняю і він просить навпаки,
і так до +нескінченності

Подякували: Lata1

8

Re: Сортування масивів методом вибору мовою С

            }
              if(i!=max){
              buf=a[i];

Фігурна дужка хіба починає новий блок?
buf=a[i]; хіба виконується після if обов'язково, а не залежно від нього?
У вас тут очевидна проблема - але очевидна після того, як ви нормально вирівняєте код, щоб бачити, що виконується після чого, а що всередині чого.

Подякували: Lata1

9

Re: Сортування масивів методом вибору мовою С

Має працювати.

Прихований текст
#include <stdio.h>
int main() {
    float a[15] = {2, 6, 7.5, 4.1, 5, 2.3, 6.2, 3, 1.5, 4.9, 0.3, 12, 3, 14, 1.4};
    int   max   = 0;
    float buf   = 0;
    for (int i = 0; i < 14; i++) {
        max = i;
        for (int j = i + 1; j < 15; j++)
            if (a[j] > a[max])
                max = j;
        
        if (i != max) {
            buf    = a[i];
            a[i]   = a[max];
            a[max] = buf;
        }
    }

    for (int i = 0; i < 15; i++) {
        printf("%.1f ", a[i]);
    }
    return 0;
}
Подякували: Lata1

10

Re: Сортування масивів методом вибору мовою С

Ну не так уже й очевидно. :o  Але завдяки Вандеру стало більш-менш зрозуміло  *THUMBSUP*  . Дякую всім) *DRINK*