首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

排序有关问题

2012-03-09 
排序问题我就是想写一个程序,他能够以最少的交换次数排序,但是写出来后却不知道是那个地方错了。希望那个高

排序问题
我就是想写一个程序,他能够以最少的交换次数排序,但是写出来后却不知道是那个地方错了。希望那个高手给我修改一下;
#include <iostream>
using   namespace   std;
int   main()
{
int   a[8]={8,6,7,4,5,1,2,3};
int   i=0,j=0,k=0,t=0,p=0;
for(i=0;i <8;i++)
cout < < "   " < <a[i];
for(i=0;i <8;i++)
{
p=i;
for(j=i+1;j <8;j++)
if(a[p]> a[j])p=j;
}
if(p!=i)
{
t=a[p];
a[p]=a[i];
a[i]=t;
k++;
}
for(i=0;i <8;i++)
{
cout < < "   " < <a[i];
}
cout < <k < <endl;
system( "pause ");
return   0;
}

[解决办法]
for(i=0;i <8;i++)
{
p=i;
for(j=i+1;j <8;j++)
if(a[p]> a[j])p=j;
//每次到这里p纪录了一个最小值的位置,但覆盖了上一次的最小值位置,有什么意义????
}
if(p!=i)
{
t=a[p];
a[p]=a[i];
a[i]=t;
k++;
}
==================是不是这样?
for(i=0;i <8;i++)
{
p=i;
for(j=i+1;j <8;j++)
if(a[p]> a[j])p=j;
if(p!=i)
{
t=a[p];
a[p]=a[i];
a[i]=t;
k++;
}
}


[解决办法]
一种是以输入数据个数然后一个个输入,可用malloc实现
还有一种是不告诉输入多少个数据,随便输入知道通知程序输入到此为止,只能用链表之类的
类的

热点排行