Отсортировать массив методом пузырька - 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(). - Программа завершается после нажатия пользователем любой клавиши.