[英]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;
}
謝謝!
代碼中的氣泡排序為:
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
更大的循環變量,因為這會驅動外部循環。
氣泡排序部分
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;
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.