我尝试的算法未正确对代码进行排序,并返回0。
我已经尝试将代码外包给一个函数,以使其更加清晰,但我无法弄清楚。
data BinaryTree a = Leaf a | Branch (BinaryTree a) (BinaryTree a) deriving Show
data letters = A | B | C | D | E | F | G deriving (Show, Eq, Enum, Bounded, Read)
lett = [(A)..(G)]
str = "Branch (Leaf A) (Branch (Branch (Leaf A) (Leaf C)) (Leaf D))"
parse:: (Read a, Show a) => [a] -> String -> BinaryTree a
输出一直有效,直到用户完成输入为止,然后它给了我从1到5的迭代,并输出0而不是打印排序后的数组。目标是一次用冒泡方法对数组进行排序并打印每一步,我还希望在对算法进行排序后停止排序,因为如果计数器为0,则意味着对数组进行排序,并且程序应该停止。但是直到5点,我才真正确定错误在哪里。
答案 0 :(得分:0)
您最初没有初始化变量计数。
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)
也在第一次迭代时初始化计数器。