Почему сортировка не работает? - 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, что означает успешное выполнение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д