在C中交换两个向量
我必须写一个程序,其中向量从最小到最大排序。我使用一个带swap的bubble函数来交换这两个向量。给出了swap和bubble代码,但问题是它没有交换向量。赋值要求使用这个交换函数,并用向量的地址调用它在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
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中的值不正确对应