#include<stdio.h>
int Insert_sort(int *p,int length)
{
int i,j,key;
for(i=1;i<=(length-1);i++)
{
if(*(p+i)<*(p+i-1))
{
key=*(p+i);
*(p+i)=*(p+i-1);
for(j=i-1;j>=0 &&key<*(p+j);--j)
{
*(p+j)=*(p+j-1);
}
*(p+j+1)=key;
}
}
return 0;
}
int main()
{
int a[10]={0,4,1,9,5,7,2,3,6,8};
int i;
int *p=&a[0];
Insert_sort(p,10);
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
}
通过指针调用的形式来改变原来数组中的值,这样就可以了。而每一个数组元素都可以用指针加位移量来确定
#include<stdio.h>
void main()
{
int i,j;
//a[0]为哨兵,所以它的值随便,但是注意要排序的是后面的几个,而且长度也是后面的几个。
int a[11]={0,1,2,4,9,0,3,8,6,7,5};
//插入排序
for(i=2;i<=10;++i)
{
if(a[i]<a[i-1])
{
a[0]=a[i]; //已经保存了a[i],所以下面就不必担心被冲掉。
a[i]=a[i-1];
for(j=i-2;a[0]<a[j];--j)
{
a[j+1]=a[j];
}
a[j+1]=a[0];
}
}
for(i=1;i<11;i++) //从a[1]开始输出,这样才消除了哨兵。
{
printf("%d ",a[i]);
}
}
注意真正的排序部分是从a[1]开始的,还有长度length不是数组的长度,而是实际要排序的长度,这里把a[i]冲掉的步骤很好,而且没有影响,因为已经保存下来了。
--------------------《数据结构 严蔚敏版》
1#include<stdio.h>
2void main()
3{
4 int a[10]={0,4,1,9,5,7,2,3,6,8};
5 int key,i,j;
6 for(i=1;i<=9;i++)
7 {
8 if(a[i]<a[i-1])
9 {
10 key=a[i];
11 a[i]=a[i-1];
12 for(j=i-1;j>=0 && key<a[j];--j)
13 {
14 a[j]=a[j-1];
15 }
16 a[j+1]=key;
17 }
18 }
19 for(i=0;i<10;i++)
20 {
21 printf("%d ",a[i]);
22 }
23}
24
posted on 2009-11-27 21:29
deercoder 阅读(297)
评论(0) 编辑 收藏 引用 所属分类:
数据结构和算法分析