Bubble sort ascendente/descendente

Escrever um método Bolha em C para ordenar um vetor de forma centralizada. A primeira metade deve ter elementos ordenados em ordem ascendente e a segunda metade em ordem descendente. Estou com bloqueio mental só consigo chegar nisso !

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

void bubbleSort(int *vetor, int n )
{
    int i, j, aux;
    for( i = 0 ; i < n-1 ; i++ )
    {
        for( j = 1 ; j < n-i ; j++ )
        {
            if ( vetor[j] < vetor[j-1] )
            {
                troca(&vetor[j-1], &vetor[j]);
            }
        }
    }
}

void bubbleSort2(int *vetor, int n )
{
    int i, j, trocou;
    for( i = 0 ; i < n-1 ; i++ )
    {
        trocou = 0;
        for( j = 1 ; j < n-i ; j++ )
        {
            if ( vetor[j] < vetor[j-1] )
            {
                troca(&vetor[j-1], &vetor[j]);
                trocou = 1;
            }
        }
        if (trocou == 0)
        {
            break;
        }
  }
}

int main()
{
    int i;
    int vet[5] = {5, 2, 8, 1, 0};
    bubbleSort(vet, 5);
    for( i=0; i < 5; i++)
    {
        printf(" %d ", vet[i] );
    }
}
1 curtida

RESPOSTA:

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

void bubbleSort(int *vetor, int n )
{
    int i, j;
    for( i = 0 ; i < n-1 ; i++ )
    {
        for( j = 1 ; j < n-i ; j++ )
        {
            if ( vetor[j] < vetor[j-1] )
            {
                troca(&vetor[j-1], &vetor[j]);
            }
        }
    }
}

void bubbleSort2(int *vetor, int n, int m )
{
    int i, j;
    for( i = 0 ; i < n-1 ; i++ )
    {
        for( j = n ; j < m-i ; j++ )
        {
            if ( vetor[j] > vetor[j-1] )
            {
                troca(&vetor[j-1], &vetor[j]);
            }
        }
    }
}

int main()
{
    int i;
    int vet[8] = {8,1,6,2,5,9,0,3};
    int meio=((sizeof(vet)/2)/4);
    int fim=sizeof(vet)/4;
    printf("Vetor:\n");
    for( i=0; i < 8; i++)
    {
        printf(" %d ", vet[i] );
    }
    printf("\n");
    bubbleSort(vet, meio);
    bubbleSort2(vet, meio+1,fim);
    printf("Vetor ordenado ascendente ate o meio e descendendo do meio ate o fim:\n");
    for( i=0; i < 8; i++)
    {
        printf(" %d ", vet[i] );
    }
}
1 curtida