当前位置:K88软件开发文章中心编程全书编程全书02 → 文章内容

直接插入排序算法

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-4 9:09:52

-->

[t]直接插入排序(Insertion Sort):[/t]

基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子序列中的适当位置,直到全部记录插入完成为止。

[t]程序分析[/t]

a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]
10987654321

调用排算法

a[0]a[1]a[2]
1098
a[i-1]a[i]

temp=a[i] //所以temp=9;
继续执行 for(j=i-1;a[j]>temp;j–)

j=i-1j–
0-1

执行循环体中 a[j+1]=a[j];后
即将a[0]赋值给a[1],即将10覆盖9
得到 a[0]=10, a[1]=10;

a[0]a[1]a[2]
10108
a[j]a[j+1]

最后for语句j–; j=-1;
继续执行 a[j+1]=temp; ?此时a[0]=9;完成第一趟排序。

jj+1
-10
a[0]a[1]a[2]
9108

[t]源程序如下:[/t]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include
#define N 10
void insertsort(int a[])
{
int i,j,temp;
for(i=1;i<N;i++)
if(a[i]<a[i-1]) { temp=a[i]; //将待排序的数放到temp中 for(j=i-1;a[j]>temp;j--) //向前移动数字
a[j+1]=a[j];
a[j+1]=temp;
}for(i=0;i<N;i++)
printf("%d ",a[i]);}int main()
{
int a[N]={10,9,8,7,6,5,4,3,2,1};
insertsort(a);
return 0;}
直接插入排序
j=i-1j–
01

直接插入排序算法