为什么每次迭代都不能正确打印气泡排序?

时间:2019-10-31 14:44:52

标签: c arrays sorting bubble-sort

我尝试的算法未正确对代码进行排序,并返回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点,我才真正确定错误在哪里。

1 个答案:

答案 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)

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