我正在尝试创建一个实现梳理排序的函数,但是我的代码实际上正在读取我想要输入的数组。
void comb_sort(int* numbers, int size)
{
int gap = size;
float shrink = 1.3;
int sorted = 0;
do
{
gap = gap/shrink;
if (gap > 1)
sorted = 0;
else
{
gap = 1;
sorted = 1;
}
int i = 0;
do
{
if (numbers+i > numbers+(i+gap))
{
swap(numbers+i,numbers+(i+gap));
sorted = 0;
}
i++;
}while(i+gap < size);
} while (sorted == 0);
}
numbers参数是我的main函数中的一个数组,但是因为我想改变传入指针的值。但是,包含它的if语句实际上似乎没有传递给它的数组值。当使用gdb测试它时,它只有1个存储在其中,即使我验证该数组具有来自其内部的文本文件的所有值。有迹象表明我错了吗?
编辑*这里是我的主要功能的代码。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "sorting.h"
int main(int argc, char* argv[]){
FILE *list;
list = fopen(argv[1],"r");
int data_size = 0;
int num;
while (fscanf(list,"%d ",&num) == 1){
data_size++;
}
fseek(list,0,SEEK_SET);
int num_array[data_size];
int j;
for (j=0;j<data_size;j++){
fscanf(list,"%d ",num_array+j);
}
if (strcmp("comb", argv[2]) == 0)
comb_sort(num_array,data_size);
答案 0 :(得分:2)
numbers+i
是一个不是值的地址。它应该是*(numbers+i)
甚至是numbers[i]
。
在if
语句条件中,您要比较两个地址而不是您想要的值。