Почему пузырьковая сортировка не распечатывается правильно с каждой итерацией? - PullRequest
0 голосов
/ 31 октября 2019

Алгоритм, который я попробовал, неправильно сортирует код и возвращает 0.

Я попытался передать код функции, чтобы сделать ее более понятной, но я просто не могу понять это.

#include <stdio.h>

int main(void) 
{
    int n,i,j,size,temp,counter;
    int k;
    printf("How many numbers to sort?\n");
    scanf("%d",&size);
    int array[size];
    for(i=0;i<size;i++)
    {
        printf("Enter number %d\n",i+1);
        scanf("%d",&k);
        array[i] = k;
    }

    // if statement for every element in the array, if it is not all minimum, then the for loop below needs to be activated.
    for(j=0;j<size;j++,counter = 0) //this code runs x times, bubble sort requires x test runs.
    // each time it runs, it resets counter to 0 and counts the number of mismatched elemnts in the array sorting small to large. If counter >= 1, has to run again.
    // can make j < size or j < 2...
    {  
        printf("Iteration# %d\n",j+1);
        for(i=0;i<size;i++)
        {
            if(array[i] > array[i+1])
            {
                temp = array[i];
                array[i] = array[i+1];
                array[i+1] = temp;
                counter++;
                printf("%d\n",array[i]);
            }
        }
        if (counter == 0)
        {
            break;
        }
    }

    return 0;
}

Вывод работает до тех пор, пока пользователь не завершит ввод, затем он дает мне итерацию от одного до пяти и печатает 0 вместо печати отсортированного массива. Цель состоит в том, чтобы сортировать массив методом пузырей по одному и печатать каждый шаг, я также хочу, чтобы сортировка прекратилась после сортировки алгоритма, потому что если счетчик равен 0, это означает, что массив отсортирован, и программа должна прекратить работу. ,Но это продолжается до 5, я действительно не уверен, где ошибка.

1 Ответ

0 голосов
/ 31 октября 2019

Вы изначально не инициализировали переменную count.

int n,i,j,size,temp,counter;

Также цикл пытается получить доступ к памяти за пределами массива. Напишите

int n,i,j,size,temp,counter = 0;

//...

for(i=1;i<size;i++)
{
    if(array[i] > array[i-1])
    {
         temp = array[i];
         array[i] = array[i-1];
         array[i-1] = temp;
         counter++;
         printf("%d\n",array[i]);
    }
}

Или вы можете написать внешний цикл, например

for( counter = 0, j=0;j<size;j++,counter = 0)

, чтобы инициализировать счетчик также для первой итерации.

...