排序

clavsummer 2009-03-30 10:14:53
#include<iostream>
using namespace std;

void qs(int data[],int left,int right)
{
int i,j,itemp,middle;
i=left;
j=right;
middle=data[(left+right)/2];
do
{
if(data[i]<middle) i++;
if(data[j]>middle) j--;
if(i<=j)
{
itemp=data[i];
data[i]=data[j];
data[j]=itemp;
i++;
j--;

}
}while(i<=j);
if(left<j)qs(data,left,j);
if(i<right)qs(data,i,right);

}
void quicksort(int data[],int len)
{
qs(data,0,len-1);
}
void main()
{
int data[]={10,9,3,4,5,7};
quicksort(data,6);
for(int i=0;i<5;i++)
{
cout<<data<<" ";//郁闷,输出的咋个是地址????????????
}
cout<<endl;
}
//哪个大虾帮忙看下,朗个这个输出的地址……,还有就是如果数组长度黑大,即不知道len,难道要用sizeof(data)/sizeof(data[0])??????
...全文
86 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ltc_mouse 2009-03-30
  • 打赏
  • 举报
回复
建议进行下单步调试,对比手动排序过程,就能很清楚知道哪里出问题了~
clavsummer 2009-03-30
  • 打赏
  • 举报
回复
不好意思我这里有错,应是for(int i=0;i <=5;i++)

怎么输出的结果是3,5,10,4,7,9
代码哪点有错?
clavsummer 2009-03-30
  • 打赏
  • 举报
回复
不好意思我这里有错,应是for(int i=0;i <=5;i++)

怎么输出的结果是3,5,10,4,7,9
代码哪点有错?
  • 打赏
  • 举报
回复

void qs(int data[],int left,int right)
{
int i,j,itemp,middle;
i=left;
j=right;
middle=data[(left+right)/2];
do
{
if(data[i] <middle) i++;
if(data[j]>middle) j--;
if(i <=j)
{
itemp=data[i];
data[i]=data[j];
data[j]=itemp;
i++;
j--;

}
}while(i <=j);
if(left <j)qs(data,left,j);
if(i <right)qs(data,i,right);

}

void quicksort(int data[],int len)
{
qs(data,0,len-1);
}

void main()
{
int data[]={10,9,3,4,5,7};
quicksort(data,6);
for(int i=0;i <5;i++)
{
cout <<data[i] <<" ";//郁闷,输出的咋个是地址???????????? //大哥,你要的可是输出数组内容?服了你了
}
cout <<endl;
}
cxxer 2009-03-30
  • 打赏
  • 举报
回复

#include <iostream>

using namespace std;

void qs(int data[],int left,int right)
{
int i,j,itemp,middle;
i = left;
j = right;
middle = data[(left+right)/2];
do
{
if(data[i] <middle) i++;
if(data[j]>middle) j--;
if(i <=j)
{
itemp = data[i];
data[i] = data[j];
data[j] = itemp;
i++;
j--;
}
}while(i <=j);

if(left <j)qs(data,left,j);
if(i <right)qs(data,i,right);

}

void quicksort(int data[],int len)
{
qs(data,0,len-1);
}

void main()
{
int data[]={10,9,3,4,5,7};
quicksort(data,6);
for(int i=0;i <5;i++)
{
cout < <data[i] < <" ";
}
cout < <endl;
}

ydntlk 2009-03-30
  • 打赏
  • 举报
回复
for(int i=0;i <5;i++)
{
cout < <data < <" ";//郁闷,输出的咋个是地址????????????
}
这输出的当然是个地址,data是个数组……
应该是cout <<data[i] <<' ';

sizeof(data)/sizeof(data[0])
经常用的办法嘛。
rookie001 2009-03-30
  • 打赏
  • 举报
回复
cout<<data<<" ";
这里一下就好了:cout<<data[i]
不过你的排序也不对,自己看看吧
ltc_mouse 2009-03-30
  • 打赏
  • 举报
回复
cout <<data <<" ";//郁闷,输出的咋个是地址????????????
---------------------
cout<< data[i] << " ";

还有就是如果数组长度黑大,即不知道len,难道要用sizeof(data)/sizeof(data[0])??????
------------------------
用sizeof(data)/sizeof(data[0])有什么不妥吗?计算数组元素个数,一般都这么用

65,211

社区成员

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

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