c语言 - 为什么每次迭代时气泡排序都无法正确打印出来?



我尝试的算法没有正确地对代码进行排序,并返回0。

我试着把代码外包给一个函数,让它更清晰,但我就是想不通。

#include <stdio.h>
int main(void) 
{
int n,i,j,size,temp,counter;
int k;
printf("How many numbers to sort?n");
scanf("%d",&size);
int array[size];
for(i=0;i<size;i++)
{
printf("Enter number %dn",i+1);
scanf("%d",&k);
array[i] = k;
}
// if statement for every element in the array, if it is not all minimum, then the for loop below needs to be activated.
for(j=0;j<size;j++,counter = 0) //this code runs x times, bubble sort requires x test runs.
// each time it runs, it resets counter to 0 and counts the number of mismatched elemnts in the array sorting small to large. If counter >= 1, has to run again.
// can make j < size or j < 2...
{  
printf("Iteration# %dn",j+1);
for(i=0;i<size;i++)
{
if(array[i] > array[i+1])
{
temp = array[i];
array[i] = array[i+1];
array[i+1] = temp;
counter++;
printf("%dn",array[i]);
}
}
if (counter == 0)
{
break;
}
}
return 0;
}

输出一直工作到用户完成输入,然后它给我从一到五的迭代,并打印0而不是打印排序后的数组。目标是用气泡法一次一个地对数组进行排序,并打印每个步骤。我还希望在算法排序后停止排序,因为如果计数器为0,则意味着数组已排序,程序应该停止。但它一直持续到5点,我真的不确定错误在哪里

您最初没有初始化变量计数。

int n,i,j,size,temp,counter;

循环还尝试访问数组之外的内存。写入

int n,i,j,size,temp,counter = 0;
//...
for(i=1;i<size;i++)
{
if(array[i] > array[i-1])
{
temp = array[i];
array[i] = array[i-1];
array[i-1] = temp;
counter++;
printf("%dn",array[i]);
}
}

或者你可以像一样编写外循环

for( counter = 0, j=0;j<size;j++,counter = 0)

也为第一次迭代初始化计数器。

最新更新