Отсортировать массив методом пузырька - 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)); }
Объяснение кода листинга программы
- В функции
main()
программа запрашивает у пользователя размер массива и сохраняет его в переменнойn
. - Затем происходит выделение памяти под массив с помощью функции
mem(n)
, и результат сохраняется в переменнойmas
. - После этого программа предлагает пользователю ввести элементы массива с помощью функции
vvod(mas, n)
. - Далее, с помощью функции
sort(mas, n)
, происходит сортировка массива методом пузырька. - И, наконец, с помощью функции
vvod(mas, n)
, происходит вывод отсортированного массива на экран. - В функции
mem(n)
происходит выделение памяти под массив. Если память не может быть выделена, то программа выводит сообщение об ошибке и возвращаетNULL
. - В функции
vvod(mas, n)
используется циклfor
для прохода по всем элементам массива и ввода их с клавиатуры с помощью функцииscanf()
. - В функции
sort(mas, n)
используется два вложенных циклаfor
. Внешний цикл выполняется доn-1
, так как последний элемент уже будет находиться в правильной позиции. Внутренний цикл сортирует элементы, сравнивая каждую пару соседних элементов. Если элементы не упорядочены, то они меняются местами с помощью временной переменнойtmp
. - В функции
vvod(mas, n)
используется циклfor
для прохода по всем элементам массива и вывода их на экран с помощью функцииprintf()
. - Программа завершается после нажатия пользователем любой клавиши.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д