Невозможно правильно использовать цикл do-while для реализации пузырьковой сортировки

//create swap function 
void swap(int* a, int* b)
{
//implement swap function
int temp = *a;
*a = *b;
*b = temp;
}

void sort(int arrayofval[], int n)
{
int burst = 0;
do
{
  for(int i=0, burst = 0; i < n; i++)
  if(arrayofval[i] > arrayofval[i+1])
  {
  swap(&arrayofval[i], &arrayofval[i+1]);
  burst++; 
  }
}
while(burst != 0);
return; 

Hiya! Я пытаюсь реализовать функцию сортировки и перестановки пузырьков на языке C, и немного ударить по стенке:-(При отладке кажется, что моя функция подкачки и начальный цикл работают. Однако, похоже, что моя функция завершается после первого цикл и не повторяет процесс loop > swap values, потому что условие для:

пока (взрыв!= 0)

не работает Может ли кто-нибудь помочь мне понять это немного больше?

1 ответ

Это работает просто отлично, кроме того, что вы должны сделать i < n-1, так как arrayofval[i+1] будет указывать за массив для i = n-1,

#include <stdio.h>

void swap(int* a, int* b)
{
    int temp = *a;
    *a = *b;
    *b = temp;
}

void sort(int arrayofval[], int n)
{
    int burst, i = 0;
    do
    {
        for(i=0, burst = 0; i < n-1; i++)
            if(arrayofval[i] > arrayofval[i+1])
            {
                swap(&arrayofval[i], &arrayofval[i+1]);
                burst++; 
            }
    }
    while(burst != 0);
}

int main( int argc, char ** argv ) {
    int list[] = {3,2,1};
    sort( list, 3 );
    printf("%d %d %d\n", list[0], list[1], list[2] );
}
Другие вопросы по тегам