排序,排序,接下来我们还是学习排序。
插入排序,把初始数组的第一位置的数先拿出来,摆在新数组的第一位;拿出初始数组的第二位置的数,把它与新数组的数进行比较,若它比新数组的第一位数小,则将新数组的第一位置的数摆在第二位上,再将拿出来的初始数组的数摆在新数组的第一位置上(注意,这里不是交换);拿出初始数组中的第三位置上的数,与新数组中的数进行比较,要从后面开始比较,若拿出来的数小于新数组的第二位置的数,则将新数组的第二位置的数摆在新数组的第三位置上,再将拿出来的数与新数组的第一位置上的数比较,若没有新数组的第一位置上的数大,则再将拿出来的数摆在新数组的第二位;........
初始数组顺序【2 9 6 1 7 4】
首先,我们取出初始数组第一位置上的数 :
【2 】
接下来,我们拿出初始数组第二位置上的数来比较:
排序后【2 9 】
拿出初始数组第三位置的数从后面开始比较:
排序后【2 6 9 】
...........
排序后【1 2 6 9 】
............
排序后【1 2 6 7 9 】
............
排序后【1 2 4 6 7 9】
如此下来,就会发现这组数都从小到大的顺序排列。
这里着重强调,不是交换,是把新数组中的数向后排!!!!
下面我直接甩出代码:
#include<stdio.h>
int main()
{
int i,j,tem,n,pos;
int a[100005]={0};
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(i=1;i<n;i++)
{
tem=a[i];
pos=i-1;
while((pos>=0)&&(tem<a[pos]))
{
a[pos+1]=a[pos];
pos--;
}
a[pos+1]=tem;
}
for(i=0;i<n;i++)
printf("%d",a[i]);
return 0;
}
记得点赞,收藏,加关注哦!!!!