2015-05-16 3 views
0

Я получаю неправильный вывод для любого введенного значения, например, если я ввел 5,4,3,2,1, выход 1,1,1,1,1 .. Я использовал алгоритм сортировки пузырьков в функции bubblesort ... и передал массив A функции, но вывод состоял только из последнего введенного значения i.Получение неправильного вывода при сортировке пузырьков

#include <stdio.h> 
#define SIZE 5 
void bubblesort(int A[]); 
int main(void) 
{ 
    int A[SIZE]={0}; 
    int i; 
    puts("Enter value to store it in integer"); 
    for(i=0;i<SIZE;i++) 
    { 
    scanf("%d",&A[i]); 
    } 
    puts(""); 
    bubblesort(A); 
} 

void bubblesort(int A[]) 
{ 
    int i,j; 
    for(i=0;i<SIZE;i++) 
    { 
    for(j=0;j<4;j++) 
    { 
     if(A[j]>A[j+1]) 
     { 
     int temp; 
     temp=A[j+1]; 
     A[j]=A[j+1]; 
     A[j]=temp; 
     } 
    } 
    } 
    for(i=0;i<SIZE;i++) 
    { 
    printf("%d ",A[i]); 
    } 
} 
+0

'A [J] = A [J + 1];' РЕКОМЕНДУЕМЫМ be 'A [j + 1] = A [j];' – BLUEPIXY

+0

swap выполняется так 'temp = A [j]; A [j] = A [j + 1]; A [j + 1] = temp; ' –

+0

Чтобы освободить сортировку пузырьков от использования фиксированного' # define', рассмотрите возможность передачи размера массива, который нужно отсортировать (то есть 'void bubblesort (int * a, size_t n)'), а также удалить все выходные процедуры из функции и поместить их обратно в вызывающий (т.е. 'main()'). ** Примечание: ** ваши объявления цикла будут (например, 'for (i = 0; i <(int) n; i ++)') с литой, необходимой, чтобы избежать сравнения значений с подписью и без знака. ('n' должен быть' size_t' (без знака), потому что он никогда не будет отрицательным) –

ответ

1

Одна логическая ошибка:

Перестановка

  temp=A[j+1]; // stores A[j+1] in temp 
     A[j]=A[j+1]; // stores A[j+1] in A[j] - the value in A[j] is lost 
     A[j]=temp; // stores temp in A[j] 

Правильный путь является:

  temp=A[j+1]; // stores A[j+1] in temp 
     A[j+1]=A[j]; // stores A[j] in A[j+1] 
     A[j]=temp;  // stores temp in A[j] 

Два предложения:

Переместить это: int temp; из for loop.

Изменить это:

for(j=0;j<4;j++) 

к:

for(j=0;j<i;j++) 
+0

Получил, спасибо :) – ibadia

1

Я думаю, что ты близко, но я подозреваю, что ваша проблема здесь:

int temp; 
temp=A[j+1]; 
A[j]=A[j+1]; 
A[j]=temp; 

Я считаю, что вы хотите установить temp=A[j], так что вы можете позже установить A[j+1] = temp или что-то вдоль этих линий.

+0

Получил, спасибо :) – ibadia

1

Используйте этот код для Bubble Сортировка

#include <stdio.h> 

int main() 
{ 
    int array[100], n, c, d, swap; 

    printf("Enter Total Terms\n"); 
    scanf("%d", &n); 

    printf("Enter %d Elements\n", n); 

    for (c = 0; c < n; c++) 
    scanf("%d", &array[c]); 
//bubble sort logic 
    for (c = 0 ; c < (n - 1); c++) 
    { 
    for (d = 0 ; d < n - c - 1; d++) 
    { 
     if (array[d] > array[d+1]) /* use < For decreasing order */ 
     { 
     swap  = array[d]; 
     array[d] = array[d+1]; 
     array[d+1] = swap; 
     } 
    } 
    } 

    printf("ascending order:\n"); 

    for (c = 0 ; c < n ; c++) 
    printf("%d\n", array[c]); 

    return 0; 
}