Почему сортировка не работает? - C (СИ)
Формулировка задачи:
кто подскажет в чем проблема.почему не сортирует?
#include <stdio.h>
int main()
{
int arr[256],size,j,tmp=0;
printf("N=");scanf("%d",&size);
for (int i=0;i<size;i++)
{
printf("x[%d]=",i);
scanf("%d",&arr[i]);
}
int bubbleSort(int* arr, int size);
for (int i=0;i<size;i++){
printf("%d",arr[i]);
}
return 0;
}
void bubbleSort(int* arr, int size)
{
int tmp, i, j;
for(i = 0; i < size-1; ++i)
{
for(j = 0; j < size-1 ; ++j)
{
if (arr[j + 1] < arr[j])
{
tmp = arr[j+1];
arr[j+1] = arr[j];
arr[j] = tmp;
}
}
}
}Решение задачи: «Почему сортировка не работает?»
textual
Листинг программы
#include <stdio.h>
void bubbleSort(int* arr, int size);
int main()
{
int arr[256],size,j,tmp=0;
printf("N=");scanf("%d",&size);
for (int i=0;i<size;i++)
{
printf("x[%d]=",i);
scanf("%d",&arr[i]);
}
bubbleSort(arr, size);
for (int i=0;i<size;i++){
printf("%d",arr[i]);
}
return 0;
}
void bubbleSort(int* arr, int size)
{
int tmp, i, j;
for(i = 0; i < size-1; ++i)
{
for(j = 0; j < size-1 ; ++j)
{
if (arr[j + 1] < arr[j])
{
tmp = arr[j+1];
arr[j+1] = arr[j];
arr[j] = tmp;
}
}
}
}
Объяснение кода листинга программы
В этом коде реализована сортировка массива методом пузырька. Пузырьковая сортировка — это один из простейших алгоритмов сортировки, в котором элементы сравниваются попарно и меняются местами в зависимости от того, какой из них больше. Этот процесс повторяется до тех пор, пока массив не будет отсортирован. Вот что происходит в этом коде:
- Сначала объявляются переменные:
arr— указатель на массив, который нужно отсортировать.size— размер массива.j— индекс для внешнего цикла.tmp— временная переменная для хранения значения при обменном операторе.
- Затем происходит чтение данных из массива с помощью
scanf(). - После этого вызывается функция
bubbleSort(), которая сортирует массив методом пузырька. - Внутри функции
bubbleSort()объявляются три переменные:tmp— используется как временная переменная для хранения значения при обменном операторе.iиj— используются как индексы для внутренних циклов.
- Внутренний цикл функции
bubbleSort()выполняется до тех пор, покаjменьшеsize-1. - Внутренний цикл выполняет следующие действия:
- Проверяет, больше ли
arr[j+1]arr[j]. Если это так, то меняет их местами с помощью обменного оператораtmp = arr[j+1]; arr[j+1] = arr[j]; arr[j] = tmp;. - Увеличивает значение
jна 1.
- Проверяет, больше ли
- Когда внутренний цикл завершается, увеличивается значение
iна 1. - Если
iменьшеsize-1, то внутренний цикл повторяется. - Когда внешний цикл завершается, значения массива выводятся на экран с помощью
printf(). - Функция
main()возвращает 0, что означает успешное выполнение программы.