길이를 기준으로 정렬 할 벡터의 차원과 수를 가져 오는 programm을 만들고 싶습니다. 대부분의 코드는 작동하지만 프로그램의 정렬 부분은 작동하지 않습니다. 기본적으로 내가하고 싶은 일은 배열 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()를 사용하는 것이 좋습니다. – wildplasser
당신이 이들 중 몇 개를 정렬할지 모르겠다.하지만 그 숫자가 원격으로 크기가 크다면, 각 벡터에 대해 한번 계산 된 'bereken_lengte()'**가있는 구조체 접근법의 임시 벡터를 고려해야한다 배열 포인터를 정렬 값 엔터티와 함께 struct에서 미리 계산 된 값을 사용합니다. 'qsort()'기반 솔루션을 사용하고 성능면에서 당신을 놀라게 할 것입니다. 특히 수천 개의 벡터 데이터 세트에 대해 당신을 놀라게 할 것입니다. – WhozCraig