排序指针数组

时间:2014-11-23 16:17:53

标签: c arrays sorting pointers

我正在寻找创建和存储N个随机复数的程序。但是,必须使用指向复杂数组上每个元素的另一个数组(指针)。然后,我必须按照其规范向用户呈现它。

To" sort"它,我只是改变指针数组指向的位置。然后我只是显示"排序"指针数组。

但我没有做对。我怎样才能做到这一点?

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>

#define FORMATLOG "FORMATLOG: invalid parameters: ex3 <N>"
#define RANGE 18 - 6

enum { true, false };

typedef struct {
    double real,
           imag,
           norm;
} Complex;

void generateComplex(int N) {

    int i, test;
    Complex vector[N];

    for(i = 0; i < N; i++) {
        vector[i].real = rand() % RANGE;
        do { vector[i].imag = rand() % RANGE; } while(vector[i].imag == 0);
        vector[i].norm = sqrt(pow(vector[i].real, 2) + pow(vector[i].imag, 2));
    }

    Complex *p_vect = &vector;

    /*  makes array point in order */
    while(test == false) {
        test == true;
        for(i = 0; i < N - 1; i++)
            if(vector[i].norm > vector[i + 1].norm) {
                *p_vect[i] = &vector[i + 1];
                *p_vect[i + 1] = &vector[i];
                test = false;
            }
    }

    for(i = 0; i < N; i++)
        printf("\t%d -| %2g  + %2gi | = %g\n", i, vector[i].real,
                                               vector[i].imag,
                                               vector[i].norm);
    printf("********************************\n");
    for(i = 0; i < N; i++)
        printf("\t%d -| %2g  + %2gi | = %g\n", i, p_vect[i].real,
                                               p_vect[i].imag,
                                               p_vect[i].norm);

}

int main(int argc, char **argv) {

    if(argc != 2) {
        puts(FORMATLOG);
        return false;
    }

    srand(time(NULL));

    int i, N = atoi(argv[1]);
    generateComplex(N);

    return true;
}

1 个答案:

答案 0 :(得分:2)

Complex *p_vect = &vector;

这将创建一个指向现有数组的指针。要求是创建一个指针数组,而不是指向数组的指针。

Complex *p_vect[N];

for (i = 0; i < N; i++) {
    p_vect[i] = &vector[i];
}

如果您从这开始,则可以在不触及p_vect的情况下对vector进行排序。如果编写正确,您的排序代码将完全不提及vector