如何编写与c中的for循环相同的while循环

时间:2018-10-12 06:05:06

标签: c sorting

我在用c编写冒泡排序时遇到了奇怪的行为。 我使用for循环编写的代码是(按我的想法工作)

dfsList <- split(df, df$Fam)
number.of.not.NAs <- sapply(dfsList, function(df) sum(!is.na(df$Prop)))

这给了我输出:

给定数组:-1,3333,1,3,4,2,3,4,5,6,7,4,11,12,332,1,-11

排序数组:-11,-1,1,1,2,3,3,4,4,4,5,6,7,11,12,332,3333

但是当我使用while循环重写同一气泡排序时(不按计划工作),

int arr[] = {-1,3333,1,3,4,2,3,4,5,6,7,4,11,12,332,1,-11};
    int i,j;
    int size = sizeof(arr)/sizeof(arr[0]);
    print_array(arr,size);
    for(i=0;i<size-1;i++)
        for(j=1;j<size-i;j++)
            if(arr[j]<arr[j-1])
                swap(&arr[j],&arr[j-1]);
    print_array(arr,size);

给出输出,

给定数组:-1,3333,1,3,4,2,3,4,5,6,7,4,11,12,332,1,-11

排序数组:-1,1,3,4,2,3,4,5,6,7,4,11,12,332,1,-11,3333

我想念什么? (我在Linux中使用gcc编译器)。

1 个答案:

答案 0 :(得分:1)

for(j=1;j<size-i;j++)

您忘记了在您的while循环实现中包含j=1;

while循环应类似于:

while(i<size-1)
{
    j=0; // set j=0 here
    while(j<size-i)
    {
        {
            if(arr[j]<arr[j-1])
                swap(&arr[j],&arr[j-1]);
        }
        j++;
    }
    i++;// OR you can set j=0 here also (any one place)
}