排序问题
我就是想写一个程序,他能够以最少的交换次数排序,但是写出来后却不知道是那个地方错了。希望那个高手给我修改一下;
#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实现
还有一种是不告诉输入多少个数据,随便输入知道通知程序输入到此为止,只能用链表之类的
类的