资源简介
knn算法的c代码,支持从文件从读取数据,支持不同维度,测试正确,非常有用!
代码片段和文件信息
#include
#include
#include
#define K 3 //近邻数k
typedef float type;
//动态创建二维数组
type **createarray(int nint m)
{
int i;
type **array;
array=(type **)malloc(n*sizeof(type *));
array[0]=(type *)malloc(n*m*sizeof(type));
for(i=1;i return array;
}
//读取数据,要求首行格式为 N=数据量D=维数
void loaddata(int *nint *dtype ***arraytype ***karray)
{
int ij;
FILE *fp;
if((fp=fopen(“data.txt““r“))==NULL) fprintf(stderr“can not open data.txt!\n“);
if(fscanf(fp“N=%dD=%d“nd)!=2) fprintf(stderr“reading error!\n“);
*array=createarray(*n*d);
*karray=createarray(2K);
for(i=0;i<*n;i++)
for(j=0;j<*d;j++)
fscanf(fp“%f“&(*array)[i][j]); //读取数据
for(i=0;i<2;i++)
for(j=0;j (*karray)[i][j]=9999.0; //默认的最大值
if(fclose(fp)) fprintf(stderr“can not close data.txt“);
}
//计算欧氏距离
type computedistance(int ntype *avectortype *bvector)
{
int i;
type dist=0.0;
for(i=0;i dist+=pow(avector[i]-bvector[i]2);
return sqrt(dist);
}
//冒泡排序
void bublesort(int ntype **aint choice)
{
int ij;
type k;
for(j=0;j for(i=0;i if(0==choice){
if(a[0][i]>a[0][i+1]){
k=a[0][i];
a[0][i]=a[0][i+1];
a[0][i+1]=k;
k=a[1][i];
a[1][i]=a[1][i+1];
a[1][i+1]=k;
}
}
else if(1==choice){
if(a[1][i]>a[1][i+1]){
k=a[0][i];
a[0][i]=a[0][i+1];
a[0][i+1]=k;
k=a[1][i];
a[1][i]=a[1][i+1];
a[1][i+1]=k;
}
}
}
}
//统计有序表中的元素个数
type orderedlist(int ntype *list)
{
int icount=1maxcount=1;
type value;
for(i=0;i<(n-1);i++) {
if(list[i]!=list[i+1]) {
//printf(“count of %d is value %d\n“list[i]count);
if(count>maxcount){
maxcount=count;
value=list[i];
coun
评论
共有 条评论