1 一个排序程序,帮忙改一下!~  
 现有一组数据:  
l1:  
PU-6,2;  
PD-8,2;  
l2:  
PU-4,4;  
PD-8,4;  
l3;  
PU-5,6;  
PD-10,6;  
l4:  
PU-3,8;  
PD-7,8;  
PU是坐标开始变量,PD是坐标结束变量(PU,PD两点连接起来表示的是一条线段)。  
要求:  
1.先找出与X轴最近的那条线段(作为参考线段);  
2.以最近线段(参考线段)的PD为起点作为参考点,依次计算起点PD与下面所有线段的PU的距离,进行从小到大排序;  
3.得到第一次排序的数据后,将第一条线段保留起来,再以二条线段作为参考线段,取第二条线段的PD计算PD与下面所有线段的PU的距离,进行从小到大排序;  
4.重复2,3步骤;  
5.得到最后的排序结果.  
参考程序:  
//----------------------------perm.h    
#ifndef  PERM_H    
#define  PERM_H    
#include  <iostream>    
#include  <fstream>    
#include  <vector>    
using  namespace  std;    
   
template  <typename  T>    
inline  void  Swap(T  &a,T  &b)    
{    
 T  temp=a;    
 a=b;    
 b=temp;    
}    
     
template  <typename  T>    
void  Perm(  vector<  T  >  list,int  k,int  m,ostream  &os)    
{    
 int  i;    
 if(k==m){    
   for(i=0;i<=m;++i)    
         os<<list[i];    
   os<<endl;    
   }    
 else  for(i=k;i<=m;++i){    
       Swap(list[k],list[i]);    
       Perm(list,k+1,m,os);    
       Swap(list[k],list[i]);    
     }    
}                
     
#endif    
   
//-----------main.cpp---------------    
#include  <iostream>    
#include  <fstream>    
#include  <stdlib.h>    
#include  "perm.h"    
using  namespace  std;    
   
int  main(int  argc,  char  *argv[])    
{      
   ofstream  outfile("print_prem.txt");    
   vector<int>  a;    
       
   for(int  ix=1;ix<=3;++ix)    
         a.push_back(ix);    
   for(int  ix=0;ix<a.size();++ix)    
   cout<<a[ix];    
       
   Perm(a,0,a.size()-1,cout);        
   Perm(a,0,a.size()-1,outfile);    
       
   system("PAUSE");                
   return  0;    
}