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