Нужен пример сортировки "пузырьковым" методом - C (СИ)
Формулировка задачи:
Приведите, пожалуйста, пример простейшей программы на сортировку "пузырьковым" методом.
Решение задачи: «Нужен пример сортировки "пузырьковым" методом»
textual
Листинг программы
#include "greatest.h" void bubble(int* const arr, const unsigned int siz) { int unsorted = 1; while( unsorted ) { unsorted = 0; unsigned int i = 0; while( 1 ) { int prev = arr[i]; if( ++i == siz ) { break; } int cur = arr[i]; if( cur < prev ) { arr[i] = prev; arr[i - 1] = cur; unsorted = 1; } } } } TEST bubble_1() { int arr[] = { 1 }; bubble(arr, sizeof(arr) / sizeof(arr[0])); ASSERT_EQ(1, arr[0]); PASS(); } TEST bubble_12() { int arr[] = { 1, 2 }; bubble(arr, sizeof(arr) / sizeof(arr[0])); ASSERT_EQ(1, arr[0]); ASSERT_EQ(2, arr[1]); PASS(); } TEST bubble_21() { int arr[] = { 2, 1 }; bubble(arr, sizeof(arr) / sizeof(arr[0])); ASSERT_EQ(1, arr[0]); ASSERT_EQ(2, arr[1]); PASS(); } TEST bubble_123() { int arr[] = { 1, 2, 3 }; bubble(arr, sizeof(arr) / sizeof(arr[0])); ASSERT_EQ(1, arr[0]); ASSERT_EQ(2, arr[1]); ASSERT_EQ(3, arr[2]); PASS(); } TEST bubble_132() { int arr[] = { 1, 3, 2 }; bubble(arr, sizeof(arr) / sizeof(arr[0])); ASSERT_EQ(1, arr[0]); ASSERT_EQ(2, arr[1]); ASSERT_EQ(3, arr[2]); PASS(); } TEST bubble_213() { int arr[] = { 2, 1, 3 }; bubble(arr, sizeof(arr) / sizeof(arr[0])); ASSERT_EQ(1, arr[0]); ASSERT_EQ(2, arr[1]); ASSERT_EQ(3, arr[2]); PASS(); } TEST bubble_231() { int arr[] = { 2, 3, 1 }; bubble(arr, sizeof(arr) / sizeof(arr[0])); ASSERT_EQ(1, arr[0]); ASSERT_EQ(2, arr[1]); ASSERT_EQ(3, arr[2]); PASS(); } TEST bubble_312() { int arr[] = { 3, 1, 2 }; bubble(arr, sizeof(arr) / sizeof(arr[0])); ASSERT_EQ(1, arr[0]); ASSERT_EQ(2, arr[1]); ASSERT_EQ(3, arr[2]); PASS(); } TEST bubble_321() { int arr[] = { 3, 2, 1 }; bubble(arr, sizeof(arr) / sizeof(arr[0])); ASSERT_EQ(1, arr[0]); ASSERT_EQ(2, arr[1]); ASSERT_EQ(3, arr[2]); PASS(); } SUITE(test_bubble) { RUN_TEST(bubble_1); RUN_TEST(bubble_12); RUN_TEST(bubble_21); RUN_TEST(bubble_123); RUN_TEST(bubble_132); RUN_TEST(bubble_213); RUN_TEST(bubble_231); RUN_TEST(bubble_312); RUN_TEST(bubble_321); } GREATEST_MAIN_DEFS(); int main(int argc, char **argv) { GREATEST_MAIN_BEGIN(); /* command-line arguments, initialization. */ RUN_SUITE(test_bubble); GREATEST_MAIN_END(); /* display results */ }
Объяснение кода листинга программы
В данном коде реализована сортировка массива методом пузырька
.
Список действий:
- В функции
bubble
инициализируется переменнаяunsorted
значением 1, которая будет использоваться для контроля цикла. - Запускается цикл
while
, который будет выполняться до тех пор, покаunsorted
не станет равным 0. - Внутри цикла
while
создается вложенный циклwhile
, который будет итерироваться до тех пор, пока не будет выполнено одно из двух условий:- Переменная
i
достигнет значенияsiz
, что означает окончание прохода по массиву. - Будет найдена пара элементов, которые необходимо поменять местами (т.е. текущий элемент
cur
меньше предыдущегоprev
).
- Переменная
- Если условие внутри вложенного цикла выполняется, то значения элементов меняются местами, а переменная
unsorted
устанавливается в 1, чтобы выйти из внешнего цикла. - После завершения внешнего цикла, все элементы массива будут отсортированы по возрастанию.
Примеры тестовых случаев:
bubble_1
: сортировка массива{ 1 }
.bubble_12
: сортировка массива{ 1, 2 }
.bubble_213
: сортировка массива{ 2, 1, 3 }
.bubble_312
: сортировка массива{ 3, 1, 2 }
.bubble_321
: сортировка массива{ 3, 2, 1 }
. В основной функцииmain
вызывается функцияGREATEST_MAIN_BEGIN()
, которая инициализирует аргументы командной строки и запускает начало работы программы. Затем вызывается функцияRUN_SUITE(test_bubble)
, которая запускает все тестовые случаи изtest_bubble
. В конце вызывается функцияGREATEST_MAIN_END()
, которая выводит результаты работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д