Вопрос о сортировке пузырьком [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 становится равным значению текущего элемента, а значения текущего элемента и следующего элемента меняются местами.
- После завершения второго цикла, значения элементов массива отсортированы в порядке возрастания.
- Функция не возвращает никакого значения.