我想製作一個程序,它根據矢量的長度對矢量的維數和數量進行排序。 大部分的代碼工作,但程序的排序部分does not。 基本上我想要做的是:比較來自數組w中2個位置的bereken_lengte函數的輸出。但似乎沒有發生。 同樣在函數bereken_lengte中,我不能在循環結束後取總和的根。根據C中的長度對矢量進行排序
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
double bereken_lengte(double *array, int dim)
{
int i, j;
double sum = 0.0;
for(i=0; i<dim; ++i)
sum += pow(array[i],2);
return sum;
}
void swap(double **p, double **q)
{
double *tmp;
tmp = *p;
*p = *q;
*q = tmp;
}
void sort_vector(double *w[] , int num , int dik)
{
int i,dim,j;
dim = dik;
for(i=0;i<num;++i)
for(j = 1+i;j<num;++j)
{
if(bereken_lengte(w[i],dim) > bereken_lengte(w[j],dim) )
swap(&w[i], &w[j]);
}
}
int main (void)
{
int dim, num;
int i, j,k,l;
double **w;
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 ("%lf", &w[i][j]);
}
}
sort_vector(w,num,dim);
for(k=0; k<num; ++k)
{
printf("\n");
for(l=0; l<dim; ++l)
printf("%f ", w[k][l]);
}
return 0;
}
你們是不是要學習如何編寫一個排序的功能,或者你只是想對數據進行排序?如果你只是想對數據進行排序,我建議調用庫函數'qsort()'。 – steveha
在添加東西之前初始化總和。 sort_vector會使用qsort()而不是可怕的bubblesort更好。 – wildplasser
我不知道你正在排序的數量有多少,但是如果數量甚至遠大於你的數量,你應該考慮一個臨時向量結構的方法,每個向量具有一次**的bereken_lengte() ,並在結構中並排使用預先計算的值,並將數組指針作爲排序值實體。再加上一個基於'qsort()'的解決方案,你的性能可能會讓你感到驚訝,特別是對於數千個向量的數據集。 – WhozCraig