排序问题

p89787259 2008-11-20 07:45:04
我的代码如下:
#include<iostream>
using namespace std;
void main()
{
int i,max,j,temp;
int c[4]={2,5,6,1};

for(i=0;i<4;i++)
{
max=i;
for(j=i+1;j<4;j++)
{
if(c[max]>c[j])
{max=j;
temp=c[j];
c[j]=c[max];
c[max]=temp;
}
}
}
for(i=0;i<4;i++)
cout<<c[i]<<'\t';
}
请问为什么我用选择排序不能输出从大到小呢?那里有问题!!!
...全文
125 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnn_505 2008-11-21
  • 打赏
  • 举报
回复
using namespace std; 弄错了
void main()
{
int max,temp;
int c[4]={2,5,6,1};

for(int i=0;i <4;i++)
{
max=i;
temp =c[i];
for(int j=i+1;j <4;j++)
{
if(c[max] <c[j])
{temp =c[j];
max =j;
}
}
c[max]=c[i];
c[i]=temp;
}
for(int i=0;i <4;i++)
cout <<c[i] <<'\t';

}
xuedaoli 2008-11-21
  • 打赏
  • 举报
回复
看看数据结构书把,了解原理再去写
cnn_505 2008-11-21
  • 打赏
  • 举报
回复
#include <iostream> //选择法是依次找到最大的赋值给第一个,第二.........
using namespace std;
void main()
{
int i,max,j;
int c[4]={2,5,6,1};

for(i=0;i <4;i++)
{
max=i;
for(j=i+1;j <4;j++)
{
if(c[max]<c[j])
{c[j]=c[max];
max =j;
}
}
a[i]=a[max];
}
for(i=0;i <4;i++)
cout < <c[i] < <'\t';
}
就呆在云上 2008-11-21
  • 打赏
  • 举报
回复
按照楼主的思维来不行哈哈,还是得按照自己的思维来,我用了更多的数据:
#include <iostream> 
using namespace std;
void main()
{
int i,max,j,temp;
int c[9]={2,5,6,1,7,8,2,9,10};

for(i=0;i <9;i++)
{
for(j=i+1;j >0;j--)
{
max=j;
if(c[max]>c[j-1])
{
//max=j;
temp=c[j-1];
c[j-1]=c[max];
c[max]=temp;
}
}
}
for(i=0;i <9;i++)
cout <<c[i] <<'\t';
}


结果是:
10 9 8 7 6 5 2 2 1
就呆在云上 2008-11-21
  • 打赏
  • 举报
回复
sorry
错了
哈哈
就呆在云上 2008-11-21
  • 打赏
  • 举报
回复
排序好了:
#include <iostream> 
using namespace std;
void main()
{
int i,max,j,temp;
int c[4]={2,5,6,1};

for(i=0;i <4;i++)
{

for(j=i;j <4;j++)
{
max=j+1;
if(c[max]>c[j])
{
//max=j;
temp=c[j];
c[j]=c[max];
c[max]=temp;
}
}
}
for(i=0;i <4;i++)
cout <<c[i] <<'\t';
}

输出:
5
6
2
1
wangkangsoldier 2008-11-21
  • 打赏
  • 举报
回复
选择排序相当于用一个标记指向数组下标 第一轮找标记出最大的数组元素 将其与第一个数交换 后面类推......
lsd1025 2008-11-21
  • 打赏
  • 举报
回复
以上是按楼主的意思,冒泡排序吧?
思路清晰一点就没问题了!
lsd1025 2008-11-21
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;
void main()
{
int i,max,j,temp;
int c[4]={2,5,6,1};

for(i=0;i <4;i++)
{
max=i;
for(j=i+1;j <4;j++)
{
if(c[max]<c[j])
{
max=j;

temp=c[i];
c[i]=c[j];
c[j]=temp;
}
}
}

for(i=0;i <4;i++)
cout <<c[i] <<endl;
}
a7785577 2008-11-21
  • 打赏
  • 举报
回复
其实只要4个元素比较3次就可以了,所以,把for后的4改为3就OK了···多比较一次都会得出不正确的答案··
走好每一步 2008-11-21
  • 打赏
  • 举报
回复
楼主明白这是“选择排序”吧
明白它的原理就不会出问题了
除了二楼明白原理,貌似其他楼都糊里糊涂的
我学这个算法的时候也是糊里糊涂,到今日才豁然开朗。


for(i=0;i <3;i++)
// i 每循环一次可以找到“最大数”,
// 数组有四个元素找3次就可以了,剩下一个还要找吗?
{
max=i; // 假设数组第i个元素最大,熟练的话可以省略这句话的。
for(j=i+1;j <4;j++)
// 第i个元素依次与剩下的比,假如比它们小,就交换,确保这个元素
// 在这部分是最大的。
{
if(c[max] < c[j])
{
temp=c[j];
c[j]=c[max];
c[max]=temp;
}
}
}
for(i=0;i <4;i++)
cout <<c[i] <<'\t';
}
jy01807853 2008-11-20
  • 打赏
  • 举报
回复
不好意思有点错误
第2个循环因该是j < 4
jy01807853 2008-11-20
  • 打赏
  • 举报
回复

#include <iostream>
using namespace std;
int main()
{
int i,max,j,temp;
int c[4]={2,5,6,1};

for(i=0;i <4;i++)
{
max=i;
for(j=i+1;j <3;j++)
{
if(c[max]<c[j])
{temp=c[j];
c[j]=c[max];
c[max]=temp;
}
}
}
for(i=0;i <4;i++)
cout <<c[i] <<'\t';
cin.get();
}

Non_Recursive 2008-11-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 p89787259 的回复:]
2楼的....请你认真点!有错误
[/Quote]

你的语气也应该委婉点...^_^
p89787259 2008-11-20
  • 打赏
  • 举报
回复
2楼的....请你认真点!有错误
Lnnu_lc 2008-11-20
  • 打赏
  • 举报
回复

#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int c[4] ={2,5,6,1};

for (int i=0; i<3; i++)
{
for (int j=i+1; j<4; j++)
{
if (c[i] < c[j])
{
int temp = c[i];
c[i] = c[j];
c[j] = temp;
}
}
}

for (int i=0; i<4; i++)
cout<<c[i]<<" ";

return 0;
}
lsldd 2008-11-20
  • 打赏
  • 举报
回复
#include <iostream> 
using namespace std;
void main()
{
int i,max,j;
int c[4]={2,5,6,1};

for(i=0;i <4;i++)
{
max=i;
for(j=i+1;j < 4;j++) // <
{
if(c[max] < c[j])
max=j;
}
swap( c[i], c[max]);
}
for(i=0;i <4;i++)
cout <<c[i] <<'\t';
}

65,210

社区成员

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

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