实例019:直接插入排序
- 实例说明:
插入排序是把一个记录插入到已排序的有序序列中,使整个序列在插入该记录后仍能有序。插入排序中比较简单的一个方法是直接插入排序,其插入位置的确定方法是将待插入的记录与有序区的各记录自右向左依次比较其关键字值得大小。 - 实现过程:
#include<stdio.h>
void insort(int s[], int n)
{
int i, j;
for(i=2; i<=n; i++)
{
s[0]=s[i];
j=i-1;
while(s[0]<s[j])
{
s[j+1]=s[j];
j--;
}
s[j+1]=s[0];
}
}
void main()
{
int a[11],i;
printf("请输入10个数据:\n");
for(i=1; i<=10; i++)
scanf("%d",&a[i]);
printf("原始顺序:\n");
for(i=1;i<11;i++)
printf("%5d",a[i]);
insort(a,10);
printf("\n插入数据后顺序:\n");
for(i=1; i<11; i++)
printf("%5d", a[i]);
printf("\n");
}
- 技术要点:
1.本实例的算法过程
原始顺序:25, 12, 36, 45, 2, 9, 39, 22, 98, 37
趟数 | 监视哨 | 排序结果 |
---|---|---|
1 | 25 | (12,)25, 36, 45, 2, 9, 39, 22, 98, 37 |
2 | 12 | (12,25,)36, 45, 2, 9, 39, 22, 98, 37 |
3 | 36 | (12,25, 36,)45, 2, 9, 39, 22, 98, 37 |
4 | 45 | (12,25, 36, 45, )2, 9, 39, 22, 98, 37 |
5 | 2 | (2, 12,25, 36, 45, )9, 39, 22, 98, 37 |
6 | 9 | (2, 9, 12,25, 36, 45, )39, 22, 98, 37 |
7 | 39 | (2, 9, 12,25, 36, 39, 45, )22, 98, 37 |
8 | 22 | (2, 9, 12,22, 25, 36, 39, 45, )98, 37 |
9 | 98 | (2, 9, 12,22, 25, 36, 39, 45, 98, )37 |
10 | 37 | (2, 9, 12,22, 25, 36, 37, 39, 45, 98, ) |
2.在算法的实现中使用了监视哨,主要是为了避免数据再后移的时候丢失。
- 实验结果