选择排序
#include <stdio.h>
int main()
{
int m[100];
int i,j,n,t;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&m[i]);
for(i=0;i<n-1;i++)//排序n-1次
{
for(j=i+1;j<n;j++) //j=i+1,容易出错
{
if(m[i]>m[j])
{
t=m[i];
m[i]=m[j];
m[j]=t;
}
}
}
for(i=0;i<n;i++)
{
printf("%d",m[i]);
if(i!=n-1)
{
printf(" ");//对空格的处理;
}
}
return 0;
}
排序n-1次。
双重循环要注重端点。
比如 j=i+1 i<n-1 j<n
冒泡排序
排序n-1次,每次把最大或者最小的排在后面。
#include <stdio.h>
int main()
{
int m[100];
int i,j,n,t;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&m[i]);
for(i=0;i<n-1;i++)//排序n-1次
{
for(j=0;j<n-1-i;j++)// 判断条件可以写成j+i+1<n;
{
if(m[j]>m[j+1])
{
t=m[j];
m[j]=m[j+1];
m[j+1]=t;
}
}
}
for(i=0;i<n;i++)
{
printf("%d",m[i]);
if(i!=n-1)
{
printf(" ");//对空格的处理;
}
}
return 0;
}
端点跟选择排序不同。
j=0 而且 需要满足的条件是 j<n-1-i 因为每经过一层循环 就排好一位数。