【发布时间】:2012-03-24 20:43:01
【问题描述】:
假设我有n点
(x,y1),(x2,y2),.....(xn,yn)
我的目标是以这样的方式连接这些点,我得到一个没有自相交的样条线。我的方法是通过增加 x 值的顺序来对这些元素进行排序,如果它们相等,则比较 y 值。这是我的方法:
#include<iostream>
#include<ctime>
using namespace std;
#define N 1000
struct Point
{
int x;
int y;
}point[N];
int main()
{
int start=clock();
int n;
cout<<" enter number of coordinantes " <<endl;
cin>>n;
for(int i=1;i<=n;i++)
cin>>point[i].x>>point[i].y;
for(int i=1;i<=n-1;i++){
for(int j=i+1;j<=n;j++)
{
if(point[i].x>point[j].x)
{
int t=point[i].x;
point[i].x=point[j].x;
point[j].x=t;
}
if( point[i].x==point[j].x)
{
if(point[i].y>point[j].y)
{
int s=point[i].y;
point[i].y=point[j].y;
point[j].y=s;
}
}
}
}
int end=clock();
cout<<"coordinantes are :"<<endl;
for(int i=1;i<=n;i++)
cout<<point[i].x<<" "<<point[i].y<<endl;
cout<<(end-start)/(float)CLOCKS_PER_SEC<<endl;
return 0;
}
当我输入的元素数量等于 20 时,花费了 102.59 毫秒(笔记本电脑具有 2.5 RAM,1.87 GH)。我的方法是最优的还是存在更好的方法?
【问题讨论】:
-
你正在编写一个排序算法。你的复杂度为 O(n^2);你可以做得比这更好。见这里:en.wikipedia.org/wiki/Sort_algorithm#Comparison_of_algorithms.
标签: c++ algorithm geometry complexity-theory