我们如何将一组打乱的数按顺序排好呢?
今天,就让我们来学习吧!!
初始数组顺序【2 9 6 1 7 4】
首先,我们第一步要将这组数的的最小数找出来,并把它排到最前面;将最小数与第一位置的数交换。因此在这里,我们将1和2交换。
第一次排序后【1 9 6 2 7 4】
接下来,我们固定第一位置的数,不管它;找出从第二位置的数开始及后面的数中最小的数,将将最小数与第二位置的数交换。因此在这里,我们将2和9交换。
第二次排序后【1 2 6 9 7 4】
找出从第三位置的数开始及后面的数中最小的数,将将最小数与第三位置的数交换。因此在这里,我们将4和6交换。
第三次排序后【1 2 4 9 7 6】
找出从第四位置的数开始及后面的数中最小的数,将将最小数与第四位置的数交换。因此在这里,我们将9和6交换。
第四次排序后【1 2 4 6 7 9】
如此下来,就会发现这组数都从小到大的顺序排列。
那么我们开始写代码:
首先输出一串数:
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
然后进行某一次选择:
for(i=j+1;i<n;i++)
{
if(tem>a[i])
{
tem=a[i];
pos=i;
}
}
a[pos]=a[j];
a[j]=tem;
将要选择的位置从第一个位置开始遍历:
for(j=0;j<n-1;j++)
{
tem=a[j];
pos=j;
for(i=j+1;i<n;i++)
{
if(tem>a[i])
{
tem=a[i];
pos=i;
}
}
a[pos]=a[j];
a[j]=tem;
}
最后按新的顺序依次输出:
for(i=0;i<n;i++)
printf("%d",a[i]);
综上,我们来总结一下:
#include<stdio.h>
int main()
{
int i,j,tem,n,pos;
int a[100000]={0};
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(j=0;j<n-1;j++)
{
tem=a[j];
pos=j;
for(i=j+1;i<n;i++)
{
if(tem>a[i])
{
tem=a[i];
pos=i;
}
}
a[pos]=a[j];
a[j]=tem;
}
for(i=0;i<n;i++)
printf("%d",a[i]);
return 0;
}