Вопрос о сортировке пузырьком [C] - C (СИ)
Формулировка задачи:
Приветствую всех. С недавнего времени занялся изучением С и программирования вцелом. В процессе изучение наткнулся в википедии на описание сортировки пузырьком и описание алгоритма на псевдокоде там же. попытался реализовать функцию сортировки самостоятельно, вот что вышло:
для проверки функции написал маленькую программу заполняющую массив рандомными значениями, вот полный код:
но функция сортировки не работает вот примеры запуска программы:
прошу подсказать в чем ошибка, насколько я вижу написанная мной функция полностью повторяет псевдокод ф-ции из вики, но почему то отказывается работать. Заранее спасибо
p.s. реализацию сортировки в FAQ на форуме видел, несколько иная, интересно именно почему не работает данный вариант, приведенный в вики.
void buble_sort(int *array, int number_of_elements) { int t = 1; int swap; while(t==1) { for(int i = 0; i<number_of_elements; i++) { t = 0; if(*(array+i) > *(array+i+1)) { swap = *(array+i); *(array+i) = *(array+i+1); *(array+i+1) = swap; t = 1; } } } }
#include <stdio.h> #include <stdlib.h> #include <time.h> void buble_sort(int *, int ); void array_randomize(int *, int, int); void print_array(int* , int); int main(){ int a[5]; int max; array_randomize(&a[0], 5, 564); print_array(&a[0],5); printf("\n"); buble_sort(&a[0],5); print_array(&a[0],5); return 0; } void print_array(int *array, int number_of_elements){ for(int i = 0;i < number_of_elements;i++) printf("%d\n", *(array+i)); } void array_randomize(int *array, int number_of_elements, int limited) { srand(time(NULL)); for(int i = 0; i < number_of_elements; i++) { *(array+i) = 0 + rand() % limited; } } void buble_sort(int *array, int number_of_elements) { int t = 1; int swap; while(t==1) { for(int i = 0; i<number_of_elements; i++) { t = 0; if(*(array+i) > *(array+i+1)) { swap = *(array+i); *(array+i) = *(array+i+1); *(array+i+1) = swap; t = 1; } } } }
bash-4.2$ ./test 391 85 72 404 198 85 72 391 198 404 bash-4.2$ ./test 89 373 48 433 51 89 48 373 51 433
Решение задачи: «Вопрос о сортировке пузырьком [C]»
textual
Листинг программы
void buble_sort(int *array, int number_of_elements) { int swap; for (int j = 1; j<number_of_elements;j++) for(int i = 0; i<number_of_elements-j; i++) { if(*(array+i) > *(array+i+1)) { swap = *(array+i); *(array+i) = *(array+i+1); *(array+i+1) = swap; } } }
Объяснение кода листинга программы
- В данном коде реализуется функция
buble_sort
, которая принимает два аргумента: int *array (указатель на массив целых чисел) и int number_of_elements (количество элементов в массиве). - Внутри функции объявлены две переменные: int swap; и int i, j; (последние две будут использоваться в циклах).
- Первый цикл for начинается с j = 1 и продолжается до j < number_of_elements. Он отвечает за проход по всем элементам массива, начиная с первого.
- Второй цикл for начинается с i = 0 и продолжается до i < number_of_elements-j. Он отвечает за сравнение и обмен элементов внутри текущего
пузырька
. - Если текущий элемент больше следующего, то происходит обмен их значениями.
- Значение переменной swap становится равным значению текущего элемента, а значения текущего элемента и следующего элемента меняются местами.
- После завершения второго цикла, значения элементов массива отсортированы в порядке возрастания.
- Функция не возвращает никакого значения.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д