2015-10-11 9 views
-2

Что именно не так с этой программой, которую я написал? Я видел несколько вещей для создания пузырей с двумя циклами, но я не понимаю, почему это не работает.Простая программа для сортировки чисел в C

#include <stdio.h> 
#include <conio.h> 

void main(){ 

    int a[6]; 
    int i; 
    int temp; 
    int n; 

    printf("Enter numbers.\n"); 

    for (i = 0; i < 6; ++i) 
    { 
     scanf("%d", &a[i]); 
    } 

    for (i = 0; i < 6; ++i) 
    { 
     n = i + 1; 

     if (a[i] < a[n]) 
     { 
      temp = a[i]; 
      a[i] = a[n]; 
      a[n] = temp; 
     } 
    } 

    printf("After sorting: \n"); 

    for (i = 0; i < 6; ++i) 
    { 
     printf("%d ", a[i]); 
    } 

    getch(); 
} 
+1

Что вы узнали, когда отлаживали свой код? –

+3

У пузырей, которые вы видели, вероятно, были две вложенные петли по какой-то причине. Кстати, вы получаете доступ к 'a [6]', когда 'i' равно 5. –

ответ

1

Ваш алгоритм сортировки пузырьков неправильный. Вы делаете всего один цикл в своем массиве. В конце первого цикла массив не сортируется.

Если массив: 8 54 1 15 12 6

i = 0 ---> 8 54 1 15 12 6 
i = 1 ---> 8 1 54 15 12 6 
i = 2 ---> 8 1 15 54 12 6 
i = 3 ---> 8 1 15 12 54 6 
i = 4 ---> 8 1 15 12 6 54 
i = 5 ---> a[6] points out of the array 

После одного цикла вы будете иметь: 8 1 15 12 6 54

который не отсортирован, вы должны сделать больше цикл (два вложенные для):

int i,k; 
int temp; 

for(i = 0; i<n-1; i++) { 
    for(k = 0; k<n-1-i; k++) { 
     if(v[k] > v[k+1]) { 
      temp = v[k]; 
      v[k] = v[k+1]; 
      v[k+1] = temp; 
     } 
    } 
} 

Как указан M Ой в вопросе комментарии, когда i 5, вы получаете доступ через n к памяти не в массиве, что приводит к потенциальному segfau LTS.

+0

Я не пытаюсь использовать bubblesort. Я пытаюсь сортировать, используя самый простой алгоритм. Я хочу знать, почему именно код, который я написал, не сортирует его. –

+0

Хорошо, но вы обмениваете два элемента, которые являются пузырьками. Посмотрите на первую часть моего ответа, он должен объяснить, почему вы не можете сортировать только с одним циклом. – gengisdave

Смежные вопросы