gpt4 book ai didi

c - 为什么每次迭代时冒泡排序都不能正确打印?

转载 作者:行者123 更新时间:2023-11-30 16:11:18 24 4
gpt4 key购买 nike

我尝试的算法无法正确对代码进行排序并返回 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 %d\n",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# %d\n",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("%d\n",array[i]);
}
}
if (counter == 0)
{
break;
}
}

return 0;
}

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

最佳答案

您最初并未初始化变量 count。

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("%d\n",array[i]);
}
}

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

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

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

关于c - 为什么每次迭代时冒泡排序都不能正确打印?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58645861/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com