在C中交换两个向量

时间:2015-04-03 15:43:19

标签: c vector swap

我必须编写一个程序,其中向量从最小到最大排序。我使用带有交换的气泡功能来交换两个向量。给出了交换和泡沫代码,但问题是它没有交换向量。赋值表示使用此交换函数并使用向量的地址“调用它”。

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; 
}

1 个答案:

答案 0 :(得分: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;
}

此外,您应该动态分配a,因为用户可以输入大于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));