简化的插入排序
【项目说明】
输入一个正整数n(0<n<9)和n个从小到大排好顺序的整数,再输入一个整数x,把x插入到这组数据中,使该组数据仍然有序。
初始代码
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n,a[10],i,x;
scanf("%d",&n);
for(i=0;i<=n;i++)
scanf("%d",&a[i]);
x=a[n]; //将x存于数组最后一位,数组前n项都是有序的
for(i=n-1;i>=0;i--) //从x前一项开始倒序遍历数组与x相比较
{
if(x<a[i]) //如果a[i]>x,将a[i]与后一项互换
{
a[i+1]=a[i]+a[i+1];
a[i]=a[i+1]-a[i];
a[i+1]=a[i+1]-a[i];
}
//1 2 4 5 3
//1 2 4 3 5
//1 2 3 4 5
}
for(i=0;i<=n;i++)
printf("%d ",a[i]);
system("pause");
return 0;
}
优化代码
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n,a[10],i,x;
scanf("%d",&n);
for(i=0;i<=n;i++)
scanf("%d",&a[i]);
x=a[n]; //将x存于数组最后一位,数组前n项都是有序的
for(i=n-1;i>=0&&a[i]>x;i--)
a[i+1]=a[i];
//i=4 0 1 2 4 5 3 --> 0 1 2 4 5 5 i=3
//i=3 0 1 2 4 5 5 --> 0 1 2 4 4 5 i=2
a[i+1]=x;
for(i=0;i<=n;i++)
printf("%d ",a[i]);
system("pause");
return 0;
}