在C中交换两个向量

在C中交换两个向量,c,vector,swap,C,Vector,Swap,我必须写一个程序,其中向量从最小到最大排序。我使用一个带swap的bubble函数来交换这两个向量。给出了swap和bubble代码,但问题是它没有交换向量。赋值要求使用这个交换函数,并用向量的地址调用它 void swap (double **p, double **q) { double *temp; temp=*p; *p=*q; *q=temp; } int main (void) { int dim, num; int i, j; double **w

我必须写一个程序,其中向量从最小到最大排序。我使用一个带swap的bubble函数来交换这两个向量。给出了swap和bubble代码,但问题是它没有交换向量。赋值要求使用这个交换函数,并用向量的地址调用它

void swap (double **p, double **q)
{
double *temp;

temp=*p;    
*p=*q;      
*q=temp; 
}





int main (void)
{
int dim, num;
int i, j;
double **w, a[100];
double size;

scanf ("%d %d", &dim, &num);          /* read N and M */
w = calloc (num, sizeof (double *));  /* allocate array of M pointers */
for (i = 0; i < num; i++)
{
    /* allocate space for N dimensional vector */
    w[i] = calloc (dim, sizeof (double));
    /* read the vector */
    for (j = 0; j < dim; j++)
    {
        scanf ("%le", &w[i][j]);
    }
}

/*Length*/
for(i=0; i<num; ++i)
{
    size=0.0;
    for(j=0; j<dim; ++j)
    {
        size+=pow(w[i][j],2);
    }
    a[i]=sqrt(size);
}

    i=0;
    for (j = num - 1; j > i; --j)
    {
        if (a[j-1] > a[j])
        {
            swap(&w[j-1], &w[j]);
        }
        i++;
    }
return 0; 
}

把我的评论变成答案

交换w中的两个项时,还需要交换a中的两个对应值,以便两个数组相互匹配

if (a[j-1] > a[j])
{
    swap(&w[j-1], &w[j]);
    double temp = a[j-1];
    a[j-1] = a[j];
    a[j] = temp;
}
此外,您应该动态分配,因为用户可以输入大于100的num值

double **w;
double * a;
double size;

scanf ("%d %d", &dim, &num);          /* read N and M */
w = calloc (num, sizeof (double *));  /* allocate array of M pointers */
a = calloc (num, sizeof (double));

你忘了问一个问题。我想问题是当你交换两个向量时,你没有交换a中的值,之后a与w中的值不正确对应