求纠错:用STL容器vector和算法partition实现快速排序功能

davyjones2010 2010-06-23 04:43:12
自己的代码,但是运行不成功,找不到问题所在,还望高手指点迷津,晚生这厢有礼了···
#include<iostream>
#include<vector>
#include<algorithm>
#include<functional>
using namespace std;
typedef vector<int> VI;
typedef vector<int>::iterator VIT;
void qsort(VIT a,VIT b)
{
if(*a<*b)
{
VIT t=a;
t=partition(a,b,bind2nd(less<int>(),*t));
if(a<t-1)
qsort(a,t-1);
if(b>t+1)
qsort(t+1,b);
}
}
int main()
{
int a;
VI v_in;
VIT start,end,it;
start=v_in.begin();
end=v_in.end();
cout<<"Input 5 numbers:";
for(int i=0;i<5;i++)
{
cin>>a;
v_in.push_back(a);
}
qsort(start,end);
for(it=start;it!=end;it++)
{
cout<<*it<<' ';
}
cout<<endl;
return 0;
}

...全文
400 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
oyster2008 2010-06-23
  • 打赏
  • 举报
回复
qsort改成这样,安全一些

void qsort(VIT a,VIT b)
{
if( a < b )
{
VIT t=a;
t=partition(a+1,b,bind2nd(less<int>(),*t));
swap(*a,*(t-1));
qsort(a,t-1);
qsort(t,b);
}
}
mstlq 2010-06-23
  • 打赏
  • 举报
回复
简单示范

#include<iostream>
#include<vector>
#include<algorithm>
#include<functional>
using namespace std;
typedef vector<int> VI;
typedef vector<int>::iterator VIT;

void qsort(VIT a, VIT b)
{
if (a < b)
{
VIT t = partition(a, b, bind2nd(less<int>(), *a));
qsort(a, t);
if (*t == *a) t = a + 1;
qsort(t , b);
}
}
int main()
{
int a;
VI v_in;
VIT it;
cout << "Input 5 numbers:";
for (int i = 0; i < 5; i++)
{
cin >> a;
v_in.push_back(a);
}
qsort(v_in.begin(), v_in.end());
for (it = v_in.begin(); it != v_in.end(); it++)
{
cout << *it << ' ';
}
cout << endl;
return 0;
}
oyster2008 2010-06-23
  • 打赏
  • 举报
回复
#include<iostream>
#include<vector>
#include<algorithm>
#include<functional>
using namespace std;
typedef vector<int> VI;
typedef vector<int>::iterator VIT;
void qsort(VIT a,VIT b)
{
if( a < b - 1 )
{
VIT t=a;
t=partition(a+1,b,bind2nd(less<int>(),*t));
swap(*a,*(t-1));
qsort(a,t-1);
qsort(t,b);
}
}
int main()
{
int a;
VI v_in;
VIT start,end,it;
cout<<"Input 5 numbers:";
for(int i=0;i<5;i++)
{
cin>>a;
v_in.push_back(a);
}
start=v_in.begin();
end=v_in.end();
qsort(start,end);
for(it=v_in.begin();it!=v_in.end();it++)
{
cout<<*it<<' ';
}
cout<<endl;
return 0;
}

taodm 2010-06-23
  • 打赏
  • 举报
回复
自己一次次打印出qsort的输入输出数据来找规律呗。
davyjones2010 2010-06-23
  • 打赏
  • 举报
回复
呵呵 ,这是老师布置的作业,没办法的啊,汗
jackyjkchen 2010-06-23
  • 打赏
  • 举报
回复
算法里直接有sort,何必脱裤子放屁呢?

64,662

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧