我在用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编译器)。
答案 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)
}