Вопрос о сортировке пузырьком [C] - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Приветствую всех. С недавнего времени занялся изучением С и программирования вцелом. В процессе изучение наткнулся в википедии на описание сортировки пузырьком и описание алгоритма на псевдокоде там же. попытался реализовать функцию сортировки самостоятельно, вот что вышло:
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
прошу подсказать в чем ошибка, насколько я вижу написанная мной функция полностью повторяет псевдокод ф-ции из вики, но почему то отказывается работать. Заранее спасибо p.s. реализацию сортировки в FAQ на форуме видел, несколько иная, интересно именно почему не работает данный вариант, приведенный в вики.

Решение задачи: «Вопрос о сортировке пузырьком [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;
  
     }
   }
 
}

Объяснение кода листинга программы

  1. В данном коде реализуется функция buble_sort, которая принимает два аргумента: int *array (указатель на массив целых чисел) и int number_of_elements (количество элементов в массиве).
  2. Внутри функции объявлены две переменные: int swap; и int i, j; (последние две будут использоваться в циклах).
  3. Первый цикл for начинается с j = 1 и продолжается до j < number_of_elements. Он отвечает за проход по всем элементам массива, начиная с первого.
  4. Второй цикл for начинается с i = 0 и продолжается до i < number_of_elements-j. Он отвечает за сравнение и обмен элементов внутри текущего пузырька.
  5. Если текущий элемент больше следующего, то происходит обмен их значениями.
  6. Значение переменной swap становится равным значению текущего элемента, а значения текущего элемента и следующего элемента меняются местами.
  7. После завершения второго цикла, значения элементов массива отсортированы в порядке возрастания.
  8. Функция не возвращает никакого значения.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.818 из 5