在数组C中存储n个最小数字

时间:2012-11-08 21:18:37

标签: c ansi

我的问题是我需要从一个数据文件计算欧几里德距离,之后我需要得到欧几里德距离给出的N个最低数字。

我所做的是一个数组,其中所有文件的长度都在1.000.000左右,但是它给了我分段错误,顺便说一句,这很明显。所以我认为得到N值,创建一个N长度的数组,然后只存储它们中的N个最低值,之后按新月顺序排序然后打印但是我很难对欧几里德的值进行比较距离和存储在数组中的距离。

void calcDist(Nodo *L,int vpesq[],int n)
{
    int dist[n],ed;
    while(L!=NULL){
    x=0;
    for(i=0;i<12;i++)
            x=x+pow((vpesq[i]-L->caracter[i]),2);
            ed=sqrt(x);
 }

但是现在我需要将ed的N个最低值保存到dist [n],N也是由用户给出的

2 个答案:

答案 0 :(得分:1)

你可以像这样存储N个最低值

void store_lowest_N(int* array, int N, int new_value) {
    for (int i=0; i<N; i++) {
        if (new_value < array[i]) {
            for (j=N-1; j>i; j--) {
                array[j] = array[j-1]; // shift the larger values down to make space
            }
            array[i] = new_value;
            break;
        }
    }
}

void initialize_array(int* array, int N) {
    for (int i=0; i<N; i++) {
        array[i] = INT_MAX;
    }
}

答案 1 :(得分:0)

如果N不是那么大,为什么不通过这个N-Array进行FOR循环来检查你的欧几里得距离是否小于N-Array的至少一个元素? 如果您遇到此问题,则可能导致您的阵列未初始化。这意味着您首先必须使用大文件的前N个数字填充数组。如果您只创建一个这样的数组,就会发生这种情况:

int my_array[100];

如果未分配数组的所有100个值,则非赋值的值将为0(可能取决于编译器),并且可能会导致比较出现问题。 如果我到目前为止理解你的问题,那就是全部。