Отсортировать массив методом пузырька - C (СИ) (74599)

Узнай цену своей работы

Формулировка задачи:

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

задание

звучит так: Задать динамический одномерный массив, размером n. Отсортировать данный массив методом пузырька. Все законченные части программы оформить в виде функций.
#include<stdio.h>
#include<stdlib.h>
 
//прототипы функций:
int *mem(int n);
void vvod(int *mas, int n);
void sort(int *mas, int n);
void vyvod(int *mas, int n);
 
void main()
{
 
    int n;
    int *mas;
    printf ("Vvedite razmer massiva n=");
    scanf("%d", &n);
    mas=mem(n);
    printf("\nVvedite elementy massiva:");
    vvod(mas, n);
    sort(mas, n);
    printf("\nOtsortirovannyi massiv:");
}
 
// функция выделения памяти под массив
int *mem(int n)
{
    int *m;
    m=(int*)calloc(n, sizeof(int));
    if(m==NULL)
    {
        printf("\NDostato4nogo kolli4estva pamjati pod massiv net");
        return m;
    }
    return m;
}
 
//функция ввода массива
void vvod(int *mas, int n)
{
    for(int i=0; i<n; i++)
        scanf("%d", (mas+i));
}

// функция сортировки
void sort(int *mas, int n)
{
    int tmp;
    for(int i=0; i<n-1; i++)
    {
        for(int j=n-2; j>=i; j--)
        {if(*(mas+j)>*(mas(j+1)))
            tmp=*(mas+j);
            
            {*(mas+j)=*(mas(j+1));
             *(mas(j+1))=tmp;
            }
        }
    }
}
 
// функция вывода на экран
void vyvod(int *mas, int n)
{
    for(int i=0; i<n; i++)
    printf("%5d", *(mas+i));
}

Решение задачи: «Отсортировать массив методом пузырька»

textual
Листинг программы
#include<stdio.h>
#include<stdlib.h>
 
//прототипы функций:
int *mem(int n);
void vvod(int *mas, int n);
void sort(int *mas, int n);
void vyvod(int *mas, int n);
 
void main()
{
 
    int n;
    int *mas;
    printf ("Vvedite razmer massiva n=");
    scanf("%d", &n);
    mas=mem(n);
    printf("\nVvedite elementy massiva:");
    vvod(mas, n);
    sort(mas, n);
    printf("\nOtsortirovannyi massiv:");
    vyvod(mas,n);
    system("pause");
}
 
// функция выделения памяти под массив
int *mem(int n)
{
    int *m;
    m=(int*)calloc(n, sizeof(int));
    if(m==NULL)
    {
        printf("\NDostato4nogo kolli4estva pamjati pod massiv net");
        return m;
    }
    return m;
}
 
//функция ввода массива
void vvod(int *mas, int n)
{
    for(int i=0; i<n; i++)
        scanf("%d", (mas+i));
}
 
 
// функция сортировки
void sort(int *mas, int n)
{
    int tmp;
    for(int i=0; i<n-1; i++)
    {
        for(int j=n-2; j>=i; j--)
        {
            if(mas[j]>mas[j+1]){
            tmp=mas[j];
            
            mas[j]=mas[j+1];
             mas[j+1]=tmp;
            }
            
        }
    }
}
 
// функция вывода на экран
void vyvod(int *mas, int n)
{
    for(int i=0; i<n; i++)
    printf("%5d", *(mas+i));
}

Объяснение кода листинга программы

  1. В функции main() программа запрашивает у пользователя размер массива и сохраняет его в переменной n.
  2. Затем происходит выделение памяти под массив с помощью функции mem(n), и результат сохраняется в переменной mas.
  3. После этого программа предлагает пользователю ввести элементы массива с помощью функции vvod(mas, n).
  4. Далее, с помощью функции sort(mas, n), происходит сортировка массива методом пузырька.
  5. И, наконец, с помощью функции vvod(mas, n), происходит вывод отсортированного массива на экран.
  6. В функции mem(n) происходит выделение памяти под массив. Если память не может быть выделена, то программа выводит сообщение об ошибке и возвращает NULL.
  7. В функции vvod(mas, n) используется цикл for для прохода по всем элементам массива и ввода их с клавиатуры с помощью функции scanf().
  8. В функции sort(mas, n) используется два вложенных цикла for. Внешний цикл выполняется до n-1, так как последний элемент уже будет находиться в правильной позиции. Внутренний цикл сортирует элементы, сравнивая каждую пару соседних элементов. Если элементы не упорядочены, то они меняются местами с помощью временной переменной tmp.
  9. В функции vvod(mas, n) используется цикл for для прохода по всем элементам массива и вывода их на экран с помощью функции printf().
  10. Программа завершается после нажатия пользователем любой клавиши.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.1 из 5
Похожие ответы