实现二维数组排序

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wlzzhcsdn/article/details/78225624
最近在研究 粗糙集、遗传算法、人工神经网络。在遗传网络计算适应性分数上,需要建立索引,要对二维数组排序。刚刚开始还感觉无从下手,最后应用c++库函数 qsort轻松解决。
Ps:给大家推荐一个遗传算法和人工神经网络入门的书:《游戏编程中的人工智能技术》这门书里面关于神经网络和遗传算法的介绍,确实不错。
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
const char address[100]="C:\\Users\\steven\\Desktop\\work\\dm3d.txt";//数据录入地址
const char addressNew[100]="C:\\Users\\steven\\Desktop\\work\\dm3d_AfterPaixu.txt";//数据读出地址
const int hang=600000;//录入的行数(确定值)
const int maxlie=30;//录入的列数(这里是最大值,即:列数未知,但是能人为给出一个最大值,程序会自动算出实际列数,但必须小于maxlie)
//static unsigned date[hang][maxlie];
using namespace std;
struct Zuobiao
{
int lie[maxlie];
};
static Zuobiao point[hang];
int cmd(const void*,const void*);
inline int help_cmd(struct Zuobiao *,struct Zuobiao *);
int main()
{
ifstream fin(address);
for(int i=0;i
 for(int j=0;j
point[i].lie[j]=-1;
char s[1000];
int lie=0;
fin.getline(s,1000,'\n');
for(unsigned i=0;i
{
if(s[i]==' ')
lie++;//程序以空格为标识,所以要求将要录入的文件,每两个数据用空格隔开,末尾不能有空格
}
lie++;
fin.seekg(0);
cout<<"录入数据至内存..."<<endl;
for(int i=0;i
for(int j=0;j
fin>>point[i].lie[j];
cout<<"录入成功!开始排序...."<<endl;
//for(int i=0;i
 qsort(&point[0],hang,sizeof(Zuobiao),cmd);
cout<<"排序完成,读出数据..."<<endl;
ofstream fout(addressNew);
for(int i=0;i
{
fout<<point[i].lie[0];
for(int j=1;j
  fout<<" "<<point[i].lie[j];
fout<<endl;
}
}
int cmd(const void* a,const void *b)
{
struct Zuobiao * c=(struct Zuobiao *)a;
struct Zuobiao * d=(struct Zuobiao *)b;
return help_cmd(c,d);
}
inline int help_cmd(struct Zuobiao *a ,struct Zuobiao *b)
{
int i=0;
int count=0;
while(a->lie[i]!=-1)
{
if(a->lie[i] > b->lie[i])
return 1;
else if(a->lie[i] < b->lie[i])
return -1;
else
i++;
}
return -1;
}

猜你喜欢

转载自blog.csdn.net/wlzzhcsdn/article/details/78225624