付费节点推荐
免费节点
节点使用教程
[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] |
10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
调用排算法:
a[0] | a[1] | a[2] |
10 | 9 | 8 |
a[i-1] | a[i] |
temp=a[i] //所以temp=9;
继续执行 for(j=i-1;a[j]>temp;j--)
j=i-1 | j-- |
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] |
10 | 10 | 8 |
a[j] | a[j+1] |
最后for语句j--; j=-1;
继续执行 a[j+1]=temp; 此时a[0]=9;完成第一趟排序。
j | j+1 |
-1 | 0 |
a[0] | a[1] | a[2] |
9 | 10 | 8 |
[t]源程序如下:[/t]
#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-1 | j-- |
0 | 1 |
评论前必须登录!
登陆 注册