又是几个C语言的问题...

来源:百度知道 编辑:UC知道 时间:2024/09/22 16:43:21
话说,数组这一块,有一种神奇的技巧叫做冒泡法排序和直接插入法排序。非常不明白啊!!!
首先书上市这么说的:
int i,j,k;
int exchange;
for (i=0;i<n-1;i++)
{
exchange=0;
for(j=n-2;j>=i;j--)
if (a[j+1]<a[i])
{tmp=a[j+1];
a[j+1]=a[i],
a[j]=tmp;
exchange=1;
}
if (!exchange)
return;
}

这里面的FOR套FOR就是弄不明白,死活弄不明白。也看了一些参考资料但是总是很疑惑啊.....

求达人详解》。。。

我帮你写一个你容易理解的
#include<iomanip.h>
int a[]={0};
void select()
{
int x,i,j,k,n;
cout<<"请输入需要排序的数的个数:"<<endl;
cin>>n;
cout<<"您输入的数的个数为 "<<n<<" 个"<<endl;
cout<<"请输入数值"<<endl;
for (int N=0;N<n;N++)
{
cin>>x;
a[N]=x;
}
for(i=1;i<10;i++)
{
k=i-1;
for(j=i;j<10;j++)//每循环一次都是后一个到前一个进行比较
if(a[j]<a[k]) k=j;//检索出区间段的最小值
int y=a[i-1];a[i-1]=a[k];a[k]=y;//最小值和第i个进行交换

}
}
void main()
{
select();
for(int i=0;i<10;i++) cout<<a[i]<<' ';
cout<<endl;
}

//变量声明
int i,j,k;
int exchange;
//第一个for循环
for (i=0;i<n-1;i++)
{
bool exchange=0;

//第二个for循环
for(j=n-2;j>=i;j--)
if (a[j+1]<a[i])
{tmp=a[j+1];
a[j