2014-02-21 3 views
0

Здравствуйте, я пытаюсь заставить мою программу упорядочивать числа в порядке возрастания.bubble sort in C issue

Сначала введите номера, которые вы вводите (до 20), затем удалите все дубликаты и перечислите их. Затем мне нужно, чтобы они были перечислены в порядке возрастания, используя сортировку пузырьков. Может ли кто-нибудь помочь мне с этой последней частью?

#include <stdio.h> 

int main (void) 

{ 
    setbuf(stdout, NULL); 

    int nums[20] , i , j, k, swap ; 
    int count=0; 

    { 
     printf("Enter integers. (Negative -1 to stop):\n"); 
     for (i=0; i < 20; i++) 
     { 
      scanf("%d", &nums[i]); 
      count = count +1; 

      if(nums[i] == -1) 

      break; 
     } 
    } 

    printf("The numbers you entered are:\n"); 
    for(i=0;i<count;++i) 
    { 
     printf("%d\n", nums[i]); 
    } 
    printf("\n Your numbers with the duplicate numbers removed:\n "); 

    for(i=0;i<count;i++) 
    { 
     for(j=i+1;j<count;) 
     { 
      if(nums[j]==nums[i]) 
      { 
       for(k=j;k<count-1;++k) 
       { 
        nums[k]=nums[k+1]; 
       } 
       count--; 
      } 
      else 
      { 
       j++; 
      } 
     } 
    } 

for(i=0;i<count;i++) 
     printf("%d\n ",nums[i]); 

    for(i=0; i<(k-1); i++) 
    { 
     for(i=0; i < k-j; i++) 
     { 
      if (nums[i] > nums[i+1]) 
      { 
       swap = nums[i]; 
       nums[i] =nums[i+1]; 
       nums[i+1] = swap; 
      } 
     } 
    } 

    printf("\n Your numbers sorted in to ascending order:\n"); 

    for(j=0;j<i;j++) 
     printf("%d\n ",nums[i]); 

    return 0; 
} 

Спасибо!

+0

Вы хотите алгоритм сортировки пузырьков? –

+0

Отметьте свой код правильно, и вы найдете проблему. Существует пустая петля, потому что неуместная скобка. – hivert

+0

проверка дубликатов, если вы сделаете это после сортировки, будет проще, если это вам подходит. – LearningC

ответ

1

Ваш пузырьковой сортировки в коде:

for(i=0; i<(k-1); i++) 
{ 
    for(i=0; i < k-j; i++) 
    { 
    } 
    if (nums[i] > nums[i+1]) 
    { 
     swap = nums[i]; 
     nums[i] =nums[i+1]; 
     nums[i+1] = swap; 
    } 
} 

Предполагая k это число элементов для сортировки, оно должно быть:

for(i=0; i<(k-1); i++) 
{ 
    for(j=0; j < k - 1 - i; j++) 
    { 
    if (nums[j] > nums[j+1]) 
    { 
     swap = nums[j]; 
     nums[j] =nums[j+1]; 
     nums[j+1] = swap; 
    } 
} 

Ваш код имел второй цикл с пустым телом, и для внутреннего цикла вам нужна переменная переменная цикла, а не i, так как это приводит к внешнему циклу.

+0

Я попробовал это, и он просто распечатывает самое большое число снова и снова. Я не уверен, что K - количество элементов для сортировки. Сортировка пузырьков происходит сразу же после удаления дубликатов. – user3336201

+0

никогда не исправлял это. Я забыл изменить для (j = 0; j user3336201

0

Bubble рода часть

for(i=0; i<(k-1); i++) 
{ 
    for(j=0; j < k-i; j++) 
    { 

    if (nums[j] > nums[j+1]) 
    { 
     swap = nums[j]; 
     nums[j] =nums[j+1]; 
     nums[j+1] = swap; 

    } 

} 

}

+0

Это работает, но проблема, с которой я сейчас сталкиваюсь, - это последнее число в сортировке пузыря. Например, после удаления дубликатов я остаюсь с 0 1 2 3 4 5 6 7 8 9, и список восходящего списка покажет их все по порядку, за исключением последнего номера. в моем случае это было 9 – user3336201