C问题中的冒泡排序

时间:2014-02-21 07:49:06

标签: c sorting bubble-sort

您好我正在尝试让我的程序按升序排列数字。

首先列出您输入的数字(最多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;
}

谢谢!

2 个答案:

答案 0 :(得分: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的内循环的循环变量,因为这会驱动外循环。

答案 1 :(得分:0)

冒泡排序部分

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;

    }

}

}