1

Тема: Сортування масивів (бульбашковий метод)

Допоможіть знайти помилку, будь ласка.
Завдання:
Відсортувати масив за зростанням методом обміну, виконуючи сортування елементів, які перевищують надане число.
Мій код:

#include <stdio.h>
#include <ctime>
#include <iostream>
#define N 10


int main()
{
    srand(time(NULL));
    int arr[N];
    int n, k, b, i, t;
    char a;
    printf("Input dimention of array: n is the number of rows \n");
    do
    {
        printf("Input n (n >= 1) = ");
        scanf_s("%d", &n);
    } while (n < 1);
    printf("Input value of k \n");
    printf("Input k = ");
    scanf_s("%d", &k);
    printf("Use random values? Y/N\n");
    scanf_s(" %c", &a);
    if (a == 'Y')
    {
        printf("Yes n = %d\n", n);
        for (i = 0; i < n; i++)
        {
                arr[i]= rand()%100;
                printf("\t%d", arr[i]);
        }
        printf("\n");
    }
    else if (a == 'N')
    {
        printf("\nInput elements of array:\n");
        for (i = 0; i < n; i++)
        {
                printf("Input a[%d] = ", i);
                scanf_s("%d", &arr[i]);
        }
    }
    for (b = 1; b < n; b++)
    {
        for (i = 0; i < (n - b); i++)
        {if ((arr[i] > k)&&(arr[i + 1] > k) && (arr[i] > arr[i + 1]))
                {
                    t = arr[i];
                    arr[i] = arr[i + 1];
                    arr[i + 1] = t;
                }
        }
    }
  
    for (i = 0; i < n; i++) 
    {
        printf("\t%d", arr[i]);
    }
    return 0;
}

2 Востаннє редагувалося koala (07.12.2022 13:15:55)

Re: Сортування масивів (бульбашковий метод)

Ви трохи не так зрозуміли умову. Сортування - це не одинична операція обміну,  а весь процес разом. Досить складно відсортувати частину масиву, не чіпаючи решту, лише змінивши одну умову обміну. Вам тут треба:
- або створити новий масив із потрібних елементів, відсортувати його і вписати елементи назад у початковий масив;
- або замість i+1-го елемента шукати наступний, який треба міняти, в окремому циклі.
Перший спосіб, як на мене, простіший.

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