将10个数字按从大到小的顺序排列
方法一:排序法:
原理就是从第一个数开始向后比较,选出最大的来,然后将第一个和最大的交换,再从第2个开始向后比较,再选出最大的来,与第2个交换,一直这样进行下去
#include<math.h>
#include <stdio.h>
main()
{
int i,j,temp,a[10];
printf("输入10个数:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]); //用来输入数字
for(i=0;i<10;i++)
{
for(j=i+1;j<10;j++)
if(a[i]<a[j])
{
temp=a[i];
a[i]=a[j];
a[j]=temp; //从a[0]开始比较,如果遇到比a[0]大的a[i],则将a[0]与a[i]交换,然后再a[1]开始比较
}
}
printf("此10位数从大到小依次为:");
for(i=0;i<10;i++)
printf(" %d",a[i]);
}
方法2:冒泡法
原理就是将相邻的2个数来比较,将较大的交换放在最前面。如此一来最后一位就是最小的,然后再将除最后一位的前面的再进行比较,直到最后出来结果。
#include <stdio.h>
main()
{
int i,j,temp,a[10];
printf("输入10个数:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(j=0;j<10;j++)
{
for(i=0;i<10-j;i++) //配合上面for(j)用来实现循环
{
if(a[i]<a[i+1])
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp; //将相邻的较大的放在左边
}
}
}
printf("此10位数从大到小依次为:");
for(i=0;i<10;i++)
printf(" %d",a[i]);
}
其它的方法没有研究,好累,感觉不会再看(其它方法)了。
我x,想想这2种方法好像是一样的。
-----------------------------------------------------------------------
将a[i]通过插入1个数字,依次向后移动的方法:
1.我自己编的:
temp2=a[i];
a[i]=m;
for(i;i<11;i++)
{
temp3=a[i+1];
a[i+1]=temp2;
temp2=temp3;
}
2.教课书上的简便多了:
for(s=9;s>=i;s--)
a[s+1]=a[s];
a[i]=n;
自己思维定势,一直想从前向后移动,而实际上从后向前要简便多了。