#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]);
}
}
通過指針調(diào)用的形式來改變原來數(shù)組中的值,這樣就可以了。而每一個數(shù)組元素都可以用指針加位移量來確定
#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]; //已經(jīng)保存了a[i],所以下面就不必?fù)?dān)心被沖掉。
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不是數(shù)組的長度,而是實際要排序的長度,這里把a(bǔ)[i]沖掉的步驟很好,而且沒有影響,因為已經(jīng)保存下來了。

--------------------《數(shù)據(jù)結(jié)構(gòu) 嚴(yán)蔚敏版》

1
#include<stdio.h>
2
void 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